c# - 是否可以提供多个约束作为类型参数?

标签 c# generics types

我有以下情况:

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# 中提供类型参数时是否可以定义多个类型约束?

最佳答案

您提供的用法示例只有在以下情况下才有可能:

  1. 你有一个已知的类型,你希望提供,或者
  2. 支持 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/

相关文章:

swift - 为什么我不能在 Swift 中使用泛型的子类?

Java 泛型 - 获取返回与第一个参数相同类型的方法

C# 泛型和类型检查

c# - 无法启动多个进程 (C#)

c# - 连接到维基百科 API 的 WebRequest

c# - 有没有办法在 Visual Studio 搜索/替换中插入换行符?

Java 有界泛型 : Type inference bug?(方法调用,JLS 15.12.2.7)

arrays - Swift 2D 数组通用扩展 - 访问第二维的问题

c# - Azure - 无法以编程方式执行 VIP 交换

types - 如何找到一个类型的父类型和子类型?