【发布时间】:2013-02-10 05:29:12
【问题描述】:
我正在处理一个包含几种不同类型数组的小项目(例如double[]、float[]、int[]。出于验证/测试/健全的目的,我将其中一些数组打印到控制台。所以我有多个如下所示的函数(在此示例中进行了简化 - 假设我只处理单维数组):
void Print(float[] a) // prints an array of floats
{
for (int i = 0; i < a.Length; i++)
{
Console.Write(a[i]);
}
}
void Print(double[] a) // prints an array of doubles
{
for (int i = 0; i < a.Length; i++)
{
Console.Write(a[i]);
}
}
以我无限的智慧,我认为我可以通过简单地创建这些函数的通用版本来减少一些代码重复。所以我尝试了这个:
void Print<T>(T t) where T : Array
{
for (int i = 0; i < t.Length; i++)
{
Console.Write(t.GetValue(i));
}
}
Intellisense 没有抱怨,但编译器失败并出现一个非常有趣的错误:
Constraint cannot be special class 'System.Array'
我一直在寻找解释(类似于Object 或密封类,但除了提到on msdn 之外,还没有找到太多。谁能给我解释一下为什么这是case?为什么不能指定System.Array的类型约束?
p.s.:在输入这个的时候,我意识到我可以更轻松地完成我最初想要的事情,只需一个简单的函数:
void Print(System.Array a)
{
for (int i = 0; i < a.Length; i++)
{
Console.Write(a.GetValue(i));
}
}
这就是为什么编译器中有一个特殊的数组规则吗?
【问题讨论】:
-
所以目前还没有实际的答案。
标签: c# .net arrays compiler-errors generic-constraints