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

C# 委托返回类型对象不接受返回Guid的函数,c#,C#,返回以下函数时 public Guid GetUserFilterValue( string filterID ) 作为 Func 我得到的错误是,它有错误的返回类型。如果我将返回类型更改为Guid以外的任何类型,它将编译。有什么想法吗?那是因为Guid是一个二进制表示,因此没有与对象兼容的二进制表示。如果需要使此方法适应给定的签名,则需要将Guid写入对象的包装函数: Func<string, object> f = s => (object)GetUserFilterV

返回以下函数时

public Guid GetUserFilterValue( string filterID )
作为

Func

我得到的错误是,它有错误的返回类型。如果我将返回类型更改为Guid以外的任何类型,它将编译。有什么想法吗?

那是因为
Guid
是一个二进制表示,因此没有与
对象
兼容的二进制表示。如果需要使此方法适应给定的签名,则需要将
Guid
写入对象的包装函数:

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

如果返回类型是引用类型,这通常会起作用,因为
Func
对于T是协变的;但是
Guid
是一种值类型,这就是为什么您的方法不是
Func
的有效候选方法

发件人:

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

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

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