gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:06:13 26 4
gpt4 key购买 nike

我有以下情况:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com