次の関数を返す場合
public Guid GetUserFilterValue( string filterID )
として
Func<string, object>
リターンタイプが間違っているというエラーが表示されます。リターンタイプをGuid以外に変更すると、コンパイルされます。何か案は?
次の関数を返す場合
public Guid GetUserFilterValue( string filterID )
として
Func<string, object>
リターンタイプが間違っているというエラーが表示されます。リターンタイプをGuid以外に変更すると、コンパイルされます。何か案は?
これは通常、戻り型が参照型である場合に機能します。これFunc<T, TResult>
は、Tに対して共変であるためです。ただしGuid
、値型であるため、メソッドがの有効な候補ではありませんFunc<string, object>
。
MSDNから:
差異は参照型にのみ適用されます。バリアント型パラメーターに値型を指定すると、その型パラメーターは、結果として作成される型に対して不変になります。
回避策として、ラムダ式を使用できます。
Func<string, object> f = filterId => GetUserFilterValue(filterId);