表达式树,可以表示一个对象或该对象的列表
本文关键字:对象 列表 一个对象 表示 表达式 | 更新日期: 2023-09-27 18:02:52
public returnType ReturnProperty<T>(Expression<Func<T, returnType>> property) where T : MyObject
{
// Some code or something
}
显然这不是我的实际功能,但基本上我想要的是能够选择MyObject
的对象或List<MyObject>
的对象。我应该用什么来代替returnType
呢?这可能吗?除了使returnType
为object
外,还有其他选择吗?
注意:另外,我不知道在这个问题上加什么标签,对不起。
编辑:另外,我需要能够做到这两点的原因是我想有一个数组或其他东西。比如Expression<Func<T, returnType>>[] properties
。也许这给了我更多或更少的选择
可以有函数返回对象。object是任何东西,所以它可以是MyObject或List
object retval = ReturnProperty(...)
if (retval is MyObject)
{
}
else if (retval is IEnumerable<MyObject>) // Works for List, array, etc.
{
}
简短的回答是,如果你不能把它写成直接的c#代码,你就不能把它写成表达式树。
我并不认为这是一个好主意,但是你可以定义一个集合,它从包含的类型进行隐式转换,这将允许你使用一个只接受集合作为参数的表达式,例如:
private static void ProcessItems(ItemCollection c) {}
ProcessItems(new Item());
// ...
class Item {}
class ItemCollection : List<Item>
{
public static implicit operator ItemCollection(Item item)
{
return new ItemCollection {item};
}
}