我有一个包含两组数据的类。
现在,X和Y可以在任何可能的组合中保存字符串/ double / integer / datetime。唯一的规则是,在任何给定的时间点,两个列表必须包含相同数量的值。
我可以通过仅通过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
我是否应该完全抛弃这个想法并查看某种元组或某种数据结构?
编辑:我也知道约束不能是值类型,所以这是如何工作的?答案 0 :(得分: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;
}
}
但是我建议不要这样做,因为它似乎有点人为。