3

次の関数を返す場合

public Guid GetUserFilterValue( string filterID )

として

Func<string, object> 

リターンタイプが間違っているというエラーが表示されます。リターンタイプをGuid以外に変更すると、コンパイルされます。何か案は?

4

2 に答える 2

2

これは通常、戻り型が参照型である場合に機能します。これFunc<T, TResult>は、Tに対して共変であるためです。ただしGuid、値型であるため、メソッドがの有効な候補ではありませんFunc<string, object>

MSDNから:

差異は参照型にのみ適用されます。バリアント型パラメーターに値型を指定すると、その型パラメーターは、結果として作成される型に対して不変になります。

回避策として、ラムダ式を使用できます。

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 に答える