Mam następujące metody pomocnika:Nie boks lub rodzaj konwersji parametr parametr typu rodzajowego
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 pomocnika:
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:
The type 'T' cannot be used as type parameter 'T' in the generic type or method 'MyExtensions.CreateRequest()'. There is no boxing conversion or type parameter conversion from 'T' to 'MyNamespace.Request'.
Czy istnieje sposób, aby rzucić typ "T", tak aby CreateRequest woul d używać go bez problemów?
EDIT:
wiem, że mogę zrobić dwie rzeczy:
- poluzować ograniczeń createRequest lub
- dokręcić contraints na mapie.
Ale nie mogę wykonać pierwszego, ponieważ w CreateRequest I właściwości użytkownika klasy Request, i nie mogę zrobić drugiego, ponieważ używam innych typów (które nie dziedziczą z żądania) z mapą funkcjonować.
to znaczy: „albo albo żadna” –