Когда 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 на первой итерации его цикла.