我希望将一系列函数保存在一个从某种基类型派生的字典中(例如,为了清酒而调用基类“对象”)。那么,有可能将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的信息,我挖掘了字符串和布尔的定义:
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中的虚拟方法 适当的值类型实现。另见Enum,其中 继承自ValueType。“
对象:
System.Object:所有类,结构,枚举和委托。 (来自http://msdn.microsoft.com/en-us/library/system.object)
这反过来使Func<bool>
无法分配给Func<object>
一点点愚蠢。即,从这个角度看,继承层次结构是正确的。
答案 0 :(得分:3)
如果您使用的是.NET 4.0+,则可以这样做。
您的示例不起作用,因为bool是值类型。但是,如果您要使用字符串更改bool,则示例将起作用。
Func<string> f1 = () => "true";
Func<object> f2 = f1;
答案 1 :(得分:3)