我希望将一系列函数保存在从某种基类型派生的字典中(例如,让我们将基类称为“对象”)。那么,是否可以将 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 语句......但我不确定你是否可以用 lamdas 做到这一点。
跟进 Armen 的信息,我深入研究了 string 和 bool 的定义:
public sealed class String : IComparable, ICloneable, IConvertible, IEnumerable,
IComparable<String>, IEnumerabl<char>,
IEquatable<String>
public struct Boolean : IComparable, IConvertible, IComparable<Boolean>,
IEquatable<Boolean>
他对 ref Vs 价值的看法是正确的。String 是否隐式地从对象派生?根据@PeterK的链接,这似乎是结构的行为。
“ValueType 使用更合适的值类型实现覆盖来自 Object 的虚拟方法。另请参见继承自 ValueType 的 Enum。”
目的:
System.Object:所有类、结构、枚举和委托。(来自http://msdn.microsoft.com/en-us/library/system.object)
这反过来又使得Func<bool>
不能分配给Func<object>
有点愚蠢。即从那个角度来看,继承层次结构是正确的。