Это сбивает с толку, поскольку я получаю кажущиеся противоречивые ошибки.
Я использую generics, ограничивая T
до Something
, затем сдерживая U
до AnOperation<Something>
.
Я ожидал, что объект AnOperation<Something>
теперь рассматривается как тип U
. Но я получаю ошибки:
Cannot implicitly convert type 'ConsoleApp1.AnOperation<T>' to 'U'
Это странно. Ну, я попытался явным образом передать его U, тогда я получил эту ошибку:
Cannot convert type 'ConsoleApp1.AnOperation<T>' to 'U'
, который также заявил, что Cast is redundant
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
}
}
class MyClass<T, U>
where T : Something
where U : AnOperation<Something>
{
public U GetAnOperationOfSomething()
{
AnOperation<T> anOperation = new AnOperation<T>();
return anOperation; // Cannot implicitly convert type 'ConsoleApp1.AnOperation<T>' to 'U'
// return (U)anOperation; // Cannot convert type 'ConsoleApp1.AnOperation<T>' to 'U' also Cast is redundant
}
}
public class Something
{
}
public class AnOperation<T>
where T : Something
{
}
}
Что здесь происходит?
Изменить: я пытаюсь понять, в чем проблема на уровне языка, не ища обходного пути по реальной проблеме.