2009-08-31 10 views
0

これは詐欺ではないとは想像もできませんが、それ以前に一致する質問は見つからないようです。genericのメソッドをgenericメソッドから呼び出すときは、where節でキャストが必要です。

私はそれのターンにこの一般的な方法に

public T GetSetting<T>(Guid userId) where T : ISetting, new() 

を持っているが、一般的な方法

public static ISetting CreateSetting<T>(IDictionary<string, object> data) where T:ISetting, new() 

を呼び出すTの署名が全く同じで、まだコンパイラは値をキャストするために私を必要としように:

return (T) BaseSetting.CreateSetting<T>(data); 

私は何か間違っている、またはこれだけですフレームワークの制限?

答えて

2

このメソッドは、タイプISettingを返します。 T参照は常にISetting参照ですが、ISetting参照はT参照である必要はありません。だからあなたはそれをキャストしなければならないのです。

+0

正解:)ありがとう –

1

CreateSettingのシグネチャは、ISettingを返すことのみを示します。これは、そのISettingあなたが

public static T CreateSetting<T>(IDictionary<string, object> data) where T:ISetting, new() 

に署名を変更する場合は、キャストなしで動作するタイプのT.

でなければならないことを必要としません。

関連する問題