У меня есть отдельные реализации универсального интерфейса (один для классов, один для структур), и я хочу использовать статический метод Create, который обрабатывает конструкцию. Но я не могу понять, как заставить компилятор доверять мне правильное ограничение типа. Я полностью понимаю, почему он не работает, но как мне обойти это?Построение общих типов без ограничения класса/структуры
public interface ISomething<T> { }
internal class SomethingForReferenceTypes<T>
: ISomething<T> where T : class { }
internal class SomethingForValueTypes<T>
: ISomething<T> where T : struct { }
public static class Something
{
public static ISomething<T> Create<T>()
{
bool TIsAReferenceType = IKnowHowToFigureThisOut();
if (TIsAReferenceType)
return new SomethingForReferenceTypes<T>(); // ← T is not accepted here.
else
return new SomethingForValueTypes<T>(); // ← T is not accepted here.
}
}
похоже, что вам нужно будет использовать отражение, чтобы создать общие типы, а затем активировать их. – Nkosi