Когда foreach
через общий список я часто хочу сделать что-то другое для первого элемента в списке:
List<object> objs = new List<object>
{
new Object(),
new Object(),
new Object(),
new Object()
};
foreach (object o in objs)
{
if (o == objs.First())
{
System.Diagnostics.Debug.WriteLine("First object - do something special");
}
else
{
System.Diagnostics.Debug.WriteLine("object Do something else");
}
}
Это выведет:
First object - do something special object Do something else object Do something else object Do something else
Это все прекрасно и денди.
Однако, если мой общий список имеет тип значения, этот подход не будет выполнен.
List<int> ints = new List<int> { 0, 0, 0, 0 };
foreach (int i in ints)
{
if (i == ints.First())
{
System.Diagnostics.Debug.WriteLine("First int - do something special");
}
else
{
System.Diagnostics.Debug.WriteLine("int Do something else");
}
}
Это выведет:
First int - do something special First int - do something special First int - do something special First int - do something special
Теперь я знаю, что могу перекодировать это, чтобы добавить переменную флага boolean
или традиционный цикл for
, но мне интересно, есть ли способ узнать, является ли цикл foreach на первой итерации цикла.