我有以下情况:
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);
}
在C#中提供类型参数时是否可以定义多个类型约束?
答案 0 :(得分:1)
您提供的用法示例仅在以下情况下可用:
#1
可能看起来像这样:
void MyFunction()
{
KnownType result = GetFirst<KnownType>();
AddElement(result);
}
public class KnownType: SomeClass, ISomeInterface {...}
public T GetFirst<T>() => this.objects.OfType<T>().First();
#2
当前无法使用,因为C#没有交集类型。