我有以下情况:
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# 中提供类型参数时是否可以定义多个类型约束?
最佳答案
您提供的用法示例只有在以下情况下才有可能:
- 你有一个已知的类型,你希望提供,或者
- 支持 C# intersection types (例如,like TypeScript does)。
#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# 没有交集类型。
关于c# - 是否可以提供多个约束作为类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54842911/