gpt4 book ai didi

c# - 从 Func 到 Func 的转换有效,但到 Func 失败

转载 作者:太空狗 更新时间:2023-10-30 00:33:13 27 4
gpt4 key购买 nike

我有以下代码:

static Func<object, string> s_objToString = (x) => x.ToString();
static Func<string, string> s_stringToString = s_objToString; //compiles
static Func<int, string> s_intToString = s_objToString; //error

第二行编译通过,第三行编译失败,报错:

Cannot implicitly convert type 'System.Func<object,string>' to 'System.Func<int,string>'

这是为什么?

据我了解,尽管字符串是从对象 a List<string> 派生的,但通过遗传学不源自 List<object> , 但在这里 objectstring作品和objectint失败,为什么?

好吧,假设我明白为什么;现在的问题是有办法解决它(除了将 MyInt 类定义为框 int 因为 Func<object,string>Func<MyInt,string> 有效)?

最佳答案

是因为Func定义为 Func<in T, out TResult> , MSDN 是 here , 所以 Tin反变关键字,也就是说,您可以使用您指定的类型或派生程度较低的任何类型,但请记住协方差和逆方差不支持值类型:

Why covariance and contravariance do not support value type

因此,它适用于 string但不适用于 int .您可能需要阅读有关协变和逆变的更多信息:

http://msdn.microsoft.com/en-us/library/dd233060.aspx

http://msdn.microsoft.com/en-us/library/dd799517.aspx

关于c# - 从 Func<object,string> 到 Func<string,string> 的转换有效,但到 Func<int,string> 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13025176/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com