C# 4.0中泛型协变性和逆变性详解
2009-06-04 08:30:21 来源:WEB开发网private void UnsafeUse(ArrayList stuff)
{
for (int index = 0; index < stuff.Count; index++)
stuff[index] = stuff[index].ToString();
}
这是对保存在集合中的作出的更深一层的假设。当方法存在时候,集合包含了类型字符串的对象。或许这不再是原始集合中的类型。事实上,如果原始集合包含这些字符串,那么方法就不会产生效果。否则,它会将集合转换为不同的类型。下列使用实例显示了在调用方法的时候遇到的各种问题。此处,一列数字被发送到了UnsafeUse,而数字正是在此处被转换成了字符串的数组列表。调用以后,呼叫代码会尝试再一次创建能够导致InvalidCastException的项目。
// usage:
public void DoTest()
{
ArrayList collection = new ArrayList()
{
1,2,3,4,5,6,7, 8, 9, 10,
11,12,13,14,15,16,17,18,19,20,
21,22,23,24,25,26,27,28,29,30
};
SafeCovariance(collection);
// create the sum:
int sum = 0;
foreach (int num in collection)
sum += num;
Console.WriteLine(sum);
UnsafeUse(collection);
// create the sum:
sum = 0;
try
{
foreach (int num in collection)
sum += num;
Console.WriteLine(sum);
}
catch (InvalidCastException)
{
Console.WriteLine(
"Not safely covariant");
}
}
更多精彩
赞助商链接