所以我有一个函数。它接收一个名为“item”的未知类型的对象。在函数中,它声明了一个对象,并根据Type是什么,取决于对象从'item'的哪个字段获取值,例如:
private static void CreateObject<T>(T item)
{
SomeObject object = new SomeObject();
//if 'item' is type "A"
// object.Text = item.Display
//else if 'item' is type "B"
// object.Text = item.Text
//else if 'item' is type "C"
// object.Text = item.Value
}
请注意,传递 'item.display' 的字符串或任何一个都不是一个选项,因为在此函数中进行了很多操作,这是用于解释所需内容的函数的简化版本。
如何以更优雅的方式做到这一点?
我看过反射,但被告知要避免这种情况,因为它很昂贵(硬件、内存等)
最佳答案
采用将提供Text
private static void CreateObject<T>(T item, Func<T, object> prop)
{
SomeObject obj = new SomeObject();
obj.Text = prop(item).ToString();
}
所以方法的调用者会使用
CreateObject(a, t => t.Display);
CreateObject(b, t => t.Text);
// etc
关于C# 动态字段取决于 "T"类型,没有硬编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9781010/