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>
。なぜこれがコンパイルされるのですか?言うまでもなく、合格?