ReSharper 2026.1 Help

コードインスペクション: 反復変数はより具体的な型で宣言できます

次のようなクラス階層を考えます。

public class Person { public string Name { get; set; } } public class Child : Person { }

すべての子供の名前を表示するメソッドを書きたい場合は、次のように定義できます。

public void Print(IEnumerable<Child> children) { foreach (Person p in children) Console.WriteLine(p.Name); }

しかし、なぜ反復変数は Person でなければならないのでしょうか? 実際には、それを Child に簡単に変更しても、同じ結果を得られます。 ただし、より一般的な型が派生型に置き換えられた場合、コードの動作に変更を加えずにはいかないケースもありますのでご注意ください。 このケースは、反復変数が dynamic 型で宣言されている場合に発生することがあります。

2026 年 6 月 12 日