1

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

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

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

我可以通过仅通过 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

我应该完全放弃这个想法并查看某种元组或某种这样的数据结构吗?

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

4

1 回答 1

4

你所问的在 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;
    }
}

但是,我建议不要这样做,因为它似乎有些人为。

于 2012-11-28T07:06:48.613 回答