У меня следующая ситуация:
public class SomeClass {/*… */}
public interface ISomeInterface {/*… */}
public T GetFirst<T>(){/*… gets the first object of type T */}
public void AddElement<T> () where T: SomeClass, ISomeInterface {/*… */}
То, что я хотел бы сделать, это вызвать GetFirst с параметром Type, являющимся чем-то, что происходит от SomeClass и ISomeInterface.
В качестве примера, если бы у меня были следующие классы:
class A : SomeClass, ISomeInterface { }
class B : SomeClass, ISomeInterface { }
class C : SomeClass, ISomeInterface { }
И я хочу указать параметр типа GetFirst() для возврата любого из A, B или C, чтобы результат мог удовлетворять ограничению типа AddElement:
void MyFunction()
{
t result = GetFirst<t>() where t : SomeClass, ISomeInterface;
AddElement(result);
}
Можно ли определить несколько ограничений типа при предоставлении параметра типа в С#?
Приведенный вами пример использования возможен только в том случае, если:
#1
может выглядеть так:
void MyFunction()
{
KnownType result = GetFirst<KnownType>();
AddElement(result);
}
public class KnownType: SomeClass, ISomeInterface {...}
public T GetFirst<T>() => this.objects.OfType<T>().First();
#2
в настоящее время не возможно, потому что С# не имеет типов пересечения.
AddElement
- я не уверен, почему вы не просто применяете это кGetFirst
...