Я сейчас бью по стене и не могу найти решение своей проблемы.
Я пытаюсь выбрать класс для создания экземпляра в зависимости от типа моего универсального параметра. Если универсальный класс является классом, создайте экземпляр TestClass; если это структура, создайте экземпляр TestStruct; если это enum, создайте экземпляр TestEnum. Эти три класса наследуются от Test.
Цель этих классов - избежать бокса при сравнении.
Вот как выглядит мой код:
public static Test<T> Create()
{
return Create(default(T));
}
private static Test<U> Create<U>(U arg)
where U : class
{
return TestClass<U>.Create();
}
private static Test<U> Create<U>(U? arg)
where U : struct
{
return CreateStruct(arg);
}
private static Test<U> CreateStruct<U>(U? arg)
where U : struct
{
if (typeof(U).IsEnum)
{
return TestEnum<U>.Create();
}
return TestStruct<U>.Create();
}
Я получаю сообщение об ошибке в первой функции Create (): Тип 'T' должен быть ссылочным типом, чтобы использовать его в качестве параметра 'U' в универсальном типе или методе 'Test.Create (U ) '
Что имеет смысл, но как мне заставить его работать? Если я уберу ограничение для второй функции (где U: class), она скомпилируется, но всегда будет вызывать эту функцию, даже если я передам int, например
Я использую Unity, поэтому стандарт C # довольно старый, что не помогает ...