表达式树,可以表示一个对象或该对象的列表

本文关键字:对象 列表 一个对象 表示 表达式 | 更新日期: 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呢?这可能吗?除了使returnTypeobject外,还有其他选择吗?

注意:另外,我不知道在这个问题上加什么标签,对不起。

编辑:另外,我需要能够做到这两点的原因是我想有一个数组或其他东西。比如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};
    }
}