vla*_*lad 8 .net c# arrays compiler-errors generic-constraints
我工作的一个小项目有一些不同类型的数组(例如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]);
}
}
Run Code Online (Sandbox Code Playgroud)
我以无限的智慧认为,通过简单地创建这些函数的通用版本,我可以减少一些代码重复.所以我尝试了这个:
void Print<T>(T t) where T : Array
{
for (int i = 0; i < t.Length; i++)
{
Console.Write(t.GetValue(i));
}
}
Run Code Online (Sandbox Code Playgroud)
Intellisense没有抱怨,但编译器失败并出现一个非常有趣的错误:
Constraint cannot be special class 'System.Array'
我看过一个解释(类似于Object或密封类,但都没有找到多少,除了一提的MSDN上.谁能给我解释一下为什么是这样?为什么我不能指定类型约束System.Array?
ps:在输入这个时,我意识到我可以更容易地完成我原本想要的东西,使用这样一个简单的函数:
void Print(System.Array a)
{
for (int i = 0; i < a.Length; i++)
{
Console.Write(a.GetValue(i));
}
}
Run Code Online (Sandbox Code Playgroud)
这就是编译器中数组有特殊规则的原因吗?
Ser*_*rvy 17
执行所需操作的相应语法是:
void Print<T>(T[] array)
{
for (int i = 0; i < array.Length; i++)
{
Console.Write(array[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4263 次 |
| 最近记录: |