委托返回类型对象不接受返回Guid的函数

3
当返回以下函数时:
public Guid GetUserFilterValue( string filterID )

As

Func<string, object> 

我收到了错误提示,说返回类型不正确。如果将返回类型更改为除Guid之外的任何其他类型,则可以编译通过。有什么想法吗?

2个回答

2
如果返回类型是引用类型,这通常会起作用,因为对于T,Func<T, TResult>是协变的;但是Guid是值类型,这就是为什么您的方法不是Func<string, object>的有效候选方法。
来自MSDN
引用类型才适用于协变性;如果为变量类型参数指定了值类型,则该类型参数对于所得到的构造类型是不变的。
作为解决方法,您可以使用lambda表达式:
Func<string, object> f = filterId => GetUserFilterValue(filterId);

1

这是因为Guid是一个值类型, 因此没有与object兼容的二进制表示。如果您需要将此方法适应给定的签名,您需要编写一个包装函数,将Guid封装成一个对象:

Func<string, object> f = s => (object)GetUserFilterValue(s);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接