using System;
using System.Reflection;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
var result = Translate("Hello {!User!}. Welcome to {!GroupName!}!", new {
User = "John",
GroupName = "The Community"
});
Console.WriteLine(result);
}
public static string Translate(string pattern, object context)
{
return Regex.Replace(pattern, @"\{!(\w+)!}", match => {
var tag = match.Groups[1].Value;
if (context != null)
{
PropertyInfo prop = context.GetType().GetProperty(tag);
if (prop != null)
{
object value = prop.GetValue(context);
if (value != null)
{
return value.ToString();
}
}
}
return "";
});
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uUmVmbGVjdGlvbjsKdXNpbmcgU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciByZXN1bHQgPSBUcmFuc2xhdGUoIkhlbGxvIHshVXNlciF9LiBXZWxjb21lIHRvIHshR3JvdXBOYW1lIX0hIiwgbmV3IHsKCSAgICAgICAgVXNlciA9ICJKb2huIiwKCSAgICAgICAgR3JvdXBOYW1lID0gIlRoZSBDb21tdW5pdHkiCgkgICAgfSk7CgkgICAgQ29uc29sZS5Xcml0ZUxpbmUocmVzdWx0KTsKCX0KCQoJcHVibGljIHN0YXRpYyBzdHJpbmcgVHJhbnNsYXRlKHN0cmluZyBwYXR0ZXJuLCBvYmplY3QgY29udGV4dCkKICAgIHsKICAgICAgICByZXR1cm4gUmVnZXguUmVwbGFjZShwYXR0ZXJuLCBAIlx7IShcdyspIX0iLCBtYXRjaCA9PiB7CiAgICAgICAgICAgIHZhciB0YWcgPSBtYXRjaC5Hcm91cHNbMV0uVmFsdWU7CiAgICAgICAgICAgIGlmIChjb250ZXh0ICE9IG51bGwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFByb3BlcnR5SW5mbyBwcm9wID0gY29udGV4dC5HZXRUeXBlKCkuR2V0UHJvcGVydHkodGFnKTsKICAgICAgICAgICAgICAgIGlmIChwcm9wICE9IG51bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHZhbHVlID0gcHJvcC5HZXRWYWx1ZShjb250ZXh0KTsKICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5Ub1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfSk7CiAgICB9Cn0=