在 stackoverflow 上的另一个问题中,有人建议为数组编写扩展方法,但this IList<T>
在扩展方法中使用了接口。我评论说它应该是一个数组,但他拒绝了。我测试了它,当然,他是对的...... :)
扩展方法:
public static void Fill<T>(this IList<T> array, T value)
{
for(var i = 0; i < array.Count; i++)
{
array[i] = value;
}
}
测试代码:
[Test]
public void Stackoverflow()
{
int[] arr = new int[] { 1,2,3,4};
arr.Fill(2);
Assert.AreEqual(2, arr[0]);
Assert.AreEqual(2, arr[1]);
Assert.AreEqual(2, arr[2]);
Assert.AreEqual(2, arr[3]);
}
一个array
不是一个IList<T>
。为什么这甚至可以编译?更别说,通过?!