我希望在一个字典中保存一组函数,它们都是从某个基本类型继承而来(举个例子,我们可以称这个基类为“object”)。所以,是否有可能将f1保存在f2中呢?
Func<bool> f1 = () => true;
Func<object> f2 = f1;
错误1:无法将类型为
System.Func<bool>
的内容隐式转换为类型为System.Func<object>
的内容。
这是我们能做的最好吗?
Func<bool> f1 = () => true;
Func<object> f2 = () => (object)f1;
错误:(无)
我猜它需要一个where语句来使其更加通用,但我不确定你能否用lambda实现这一点。
在跟进Armen的信息后,我深入了解了字符串和布尔值的定义:
public sealed class String : IComparable, ICloneable, IConvertible, IEnumerable,
IComparable<String>, IEnumerabl<char>,
IEquatable<String>
public struct Boolean : IComparable, IConvertible, IComparable<Boolean>,
IEquatable<Boolean>
在引用与值方面,他是正确的。 String是否会隐式地从对象继承?根据@ PeterK的链接,似乎对于结构体来说就是这种行为。
"ValueType使用更适合值类型的实现重写了来自Object的虚拟方法。还可以查看继承自ValueType的Enum。"
对象:
System.Object:所有类、结构、枚举和委托。(来自http://msdn.microsoft.com/en-us/library/system.object)
这反过来使得将Func<bool>
赋值给Func<object>
有点愚蠢。即从那个角度来看,继承层次结构是正确的。
Func<object> f2 = () => (object)f1;
应该改为Func<object> f2 = () => (object)f1();
。 - leppie(object)f1
仅返回委托,而您从未调用它。 - leppie