@ avance70. Naprawdę nie jest to odpowiedź na oryginalne pytanie, ale odpowiedź na pytanie avance70 o IEnumerable z tylko jedną wartością całkowitą. Dodałem go jako komentarz, ale nie mam wystarczającej liczby przedstawicieli, aby dodać komentarz. Jeśli jesteś zainteresowany w ściśle niezmiennej kolejności, masz kilka opcji:
Typowa metoda rozszerzenie:
public static IEnumerable<T> ToEnumerable<T>(this T item)
{
yield return item;
}
Zastosowanie tak:
foreach (int i in 10.ToEnumerable())
{
Debug.WriteLine(i); //Will print "10" to output window
}
lub to:
int x = 10;
foreach (int i in x.ToEnumerable())
{
Debug.WriteLine(i); //Will print value of i to output window
}
lub inna:
int start = 0;
int end = 100;
IEnumerable<int> seq = GetRandomNumbersBetweenOneAndNinetyNineInclusive();
foreach (int i in start.ToEnumerable().Concat(seq).Concat(end.ToEnumerable()))
{
//Do something with the random numbers, bookended by 0 and 100
}
Niedawno miałem przypadek taki jak powyższy przykład, w którym musiałem "wyodrębnić" kolejne wartości z sekwencji (używając Pomiń i wziąłem), a następnie wstawić i dołączyć wartości początkowe i końcowe. Wartości początkowa i końcowa zostały interpolowane między ostatnią wyodrębnioną wartością a pierwszą wyodrębnioną wartością (dla początku) oraz między ostatnią wyodrębnioną wartością a pierwszą nieekstraną wartością (dla końca). Powstała sekwencja była następnie ponownie włączana, ewentualnie cofania.
Tak więc, jeśli oryginalna sekwencja wyglądał następująco:
może trzeba wyodrębnić 3 i 4, i dodanie wartości interpolowane pomiędzy 2 i 3 i 4 i 5:
2.5 3 4 4.5
Enumerable.Repeat. Używać tak:
foreach (int i in Enumerable.Repeat(10,1)) //Repeat "10" 1 time.
{
DoSomethingWithIt(i);
}
Oczywiście, ponieważ są IEnumerables, można je również stosować w połączeniu z innymi operacjami IEnumerable. Nie jestem pewien, czy są to naprawdę "dobre" pomysły, czy nie, ale powinny one wykonać swoją pracę.
Nice. Nauczyłem się czegoś dzisiaj! – spender
+1. Nie wiedziałem o Enumerable.Empty – AlwaysAProgrammer
Tego właśnie szukałem! – avance70