3

返回以下函数时

public Guid GetUserFilterValue( string filterID )

作为

Func<string, object> 

我收到错误返回类型错误。如果我将返回类型更改为 Guid 以外的任何内容,它就会编译。有任何想法吗?

4

2 回答 2

2

如果返回类型是引用类型,这通常会起作用,因为Func<T, TResult>对于 T 是协变的;butGuid是一个值类型,这就是为什么您的方法不是Func<string, object>.

来自MSDN

差异仅适用于引用类型;如果为变体类型参数指定值类型,则该类型参数对于生成的构造类型是不变的。

作为一种解决方法,您可以使用 lambda 表达式:

Func<string, object> f = filterId => GetUserFilterValue(filterId);
于 2012-09-20T13:47:51.863 回答
1

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

Func<string, object> f = s => (object)GetUserFilterValue(s);
于 2012-09-20T13:46:02.667 回答