次のヘルパーメソッドがあります。
public static T CreateRequest<T>()
where T : Request, new()
{
T request = new T();
// ...
// Assign default values, etc.
// ...
return request;
}
別のヘルパーの別のメソッドの内部からこのメソッドを使用したい:
public T Map<F, T>(F value, T toValue)
where T : new()
where F : new()
{
if (typeof(T).BaseType.FullName == "MyNamespace.Request")
{
toValue = MyExtensions.CreateRequest<T>();
}
else
{
toValue = new T();
}
}
しかし、その後、エラーが発生します:
型 'T' は、ジェネリック型またはメソッド 'MyExtensions.CreateRequest()' で型パラメーター 'T' として使用できません。'T' から 'MyNamespace.Request' へのボックス変換や型パラメーターの変換はありません。
CreateRequest が問題なく使用できるように、タイプ「T」をキャストする方法はありますか?
編集:
私は2つのことができることを知っています:
- CreateRequest の制約を緩めるか、
- マップの制約を強化します。
しかし、CreateRequest では Request クラスのユーザー プロパティを使用するため、最初のことはできません。また、Map 関数で他の型 (Request から継承されない) を使用するため、2 番目のことはできません。