我同意其他海報誰說你可能不應該這樣做但這並不意味着我們不能玩這個有趣的問題。所以首先,這個解決方案是半成熟/粗糙但是如果有人想要建立它,這是一個好的開始。
我寫了LinqPad,我喜歡Dump()
可以用控制檯writelines替換。
void Main()
{
XElement root = XElement.Parse(
@"<Viewdata>
<Format>{0} | {1}</Format>
<Parm>Name</Parm>
<Parm>Phone</Parm>
</Viewdata>");
var formatter = root.Descendants("Format").FirstOrDefault().Value;
var parms = root.Descendants("Parm").Select(x => x.Value).ToArray();
Person person = new Person { Name = "Jack", Phone = "(123)456-7890" };
string formatted = MagicFormatter<Person>(person, formatter, parms);
formatted.Dump();
/// OUTPUT ///
/// Jack | (123)456-7890
}
public string MagicFormatter<T>(T theobj, string formatter, params string[] propertyNames)
{
for (var index = 0; index < propertyNames.Length; index++)
{
PropertyInfo property = typeof(T).GetProperty(propertyNames[index]);
propertyNames[index] = (string)property.GetValue(theobj);
}
return string.Format(formatter, propertyNames);
}
public class Person
{
public string Name { get; set; }
public string Phone { get; set; }
}
我想像有可能與反思,但是這聽起來像一個XY問題 – Sayse