gpt4 book ai didi

c# - 泛型 C# 上的类型约束 - 多重约束

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

我有一个包含两组数据的类。

  1. X 的值列表。
  2. Y 的值列表。

现在,X 和 Y 可以以任何可能的组合保存字符串/ double /整数/日期时间。唯一的规则是在任何给定时间点,两个列表必须包含相同数量的值。

我可以通过仅通过 AddXY 方法和 RemoveAt 方法提供访问来解决始终保持相同数据的问题(确保在任何给定时间点,我可以保证 X 列表和 Y 列表的大小相同) .

此外,我希望此类的最终用户能够通过索引器访问 X 和 Y 值,如下所示。

someClassInstance.X[i] 和 someClassInstance.Y[i]

因为在 C# 中没有这方面的选项,我选择将 X 和 Y 公开为 IList (AsReadOnly) 方法。

现在,我考虑了使用泛型来限制类型的想法。但是我找不到适合这个特定案例的示例。

我怎么说

public class MyClass<P, Q> 
where P : Double, String, Integer, DateTime
and Q : Double, String, Integer, DateTime

我是否应该完全放弃这个想法并查看某种元组或此类数据结构?

编辑:我也知道约束不能是值类型,那么这是如何工作的?

最佳答案

您所问的在 C# 中是不可能的。没有统一这些类型的通用类型约束。

您能做的最好的事情就是在运行时检查,例如在静态构造函数中。像这样:

public class MyClass<P, Q>
{
static MyClass()
{
if (IsValidType(typeof(P)
&& IsValidType(typeof(Q))
throw new NotSupportedException("invalid type for MyDataStructure");
}
static bool IsValidType(Type type)
{
// logic to check whether type is acceptable
return true;
}
}

但是我建议不要这样做,因为它看起来有些人为。

关于c# - 泛型 C# 上的类型约束 - 多重约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13599584/

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