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
一样。也许这给了我更多或更少的选择。
答案 0 :(得分:0)
您可以拥有函数返回对象。对象是任何东西,所以它可以是MyObject或List&lt; MyObject&gt;。然后你可以做这样的事情:
object retval = ReturnProperty(...)
if (retval is MyObject)
{
}
else if (retval is IEnumerable<MyObject>) // Works for List, array, etc.
{
}
答案 1 :(得分:0)
简短的回答是,如果你不能把它写成直接的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};
}
}