Нет никакой разницы между двумя подходами, с точки зрения оптимизации или производительности.Чтобы доказать это, я создал краткий пример, похожий на ваш:
public class C {
public void A() {
foreach (var item in SomeClass.Collection) {}
}
public void B() {
var someCollection = SomeClass.Collection;
foreach (var item in someCollection) {}
}
}
public static class SomeClass {
public static List<string> Collection { get; set; }
}
При компиляции с использованием Roslyn .NET-компилятора версия 2.9.0, оба метода A
и B
в результате получается тот же самый промежуточный код, как показано ниже ( ссылка ).
Тело метода A
и B
List<string>.Enumerator enumerator = SomeClass.Collection.GetEnumerator();
try
{
while (enumerator.MoveNext())
{
string current = enumerator.Current;
}
}
finally
{
((IDisposable)enumerator).Dispose();
}