Brak konwersji parametrów boksu lub typu dla ogólnego parametru typu
Mam następującą metodę pomocy:
public static T CreateRequest<T>()
where T : Request, new()
{
T request = new T();
// ...
// Assign default values, etc.
// ...
return request;
}
Chcę użyć tej metody od wewnątrz innej metody w innym pomocniku:
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();
}
}
Ale wtedy pojawia się błąd:
Typu „T” nie można użyć jako parametru typu „T” w typie ogólnym lub metodzie „MyExtensions.CreateRequest ()”. Nie ma konwersji boksu ani konwersji parametru typu z „T” na „MyNamespace.Request”.
Czy istnieje sposób na rzutowanie typu „T”, tak aby CreateRequest używał go bez problemów?
EDYTOWAĆ:
Wiem, że mogę zrobić dwie rzeczy:
rozluźnić ograniczenia na CreateRequest lubdokręć ograniczenia na mapie.Ale nie mogę zrobić pierwszego, ponieważ w CreateRequest I używam właściwości klasy Request i nie mogę zrobić drugiego, ponieważ używam innych typów (które nie dziedziczą po Request) z funkcją Map.