Bu cevap: doğrudan dil desteği için C # dil ekibinin lobisini yapın.
Başlıca cevap şöyle diyor:
Açıkçası, bir endeks kavramı numaralandırma kavramına yabancıdır ve yapılamaz.
Bu, mevcut C # dil sürümü (2020) için geçerli olsa da, bu kavramsal bir CLR / Dil sınırı değildir, yapılabilir.
Microsoft C # dil geliştirme ekibi, yeni bir Interface IIndexedEnumerable için destek ekleyerek yeni bir C # dili özelliği oluşturabilir
foreach (var item in collection with var index)
{
Console.WriteLine("Iteration {0} has value {1}", index, item);
}
//or, building on @user1414213562's answer
foreach (var (item, index) in collection)
{
Console.WriteLine("Iteration {0} has value {1}", index, item);
}
foreach ()
Kullanılırsa ve varsa , with var index
derleyici öğe koleksiyonunun IIndexedEnumerable
arabirimi bildirmesini bekler . Arabirim yoksa, derleyici, kaynağı, dizini izleme koduna ekleyen bir IndexedEnumerable nesnesiyle çok dolgu yapabilir.
interface IIndexedEnumerable<T> : IEnumerable<T>
{
//Not index, because sometimes source IEnumerables are transient
public long IterationNumber { get; }
}
Daha sonra CLR, yalnızca with
anahtar kelime belirtildiğinde ve kaynak doğrudan uygulanmıyorsa kullanılan dahili dizin izlemeye sahip olacak şekilde güncellenebilirIIndexedEnumerable
Neden:
- Foreach daha hoş görünüyor ve iş uygulamalarında, foreach döngüleri nadiren bir performans darboğazıdır
- Foreach bellekte daha verimli olabilir. Her adımda yeni koleksiyonlara dönüştürmek yerine bir işlevler hattına sahip olmak. Daha az CPU önbellek hatası ve daha az çöp toplama olduğunda birkaç CPU döngüsü kullanıp kullanmadığını kim takar?
- Kodlayıcının dizin izleme kodu eklemesini gerektiren, güzelliği bozar
- Uygulanması oldukça kolaydır (lütfen Microsoft) ve geriye dönük olarak uyumludur
Çoğu insan burada Microsoft çalışanları olmasa da, bu bir doğru cevap, bu tür bir özellik eklemek Microsoft kulis edebilirsiniz. Bir uzantı işleviyle zaten kendi yineleyicinizi oluşturabilir ve tuples kullanabilirsiniz , ancak Microsoft, uzantı işlevinden kaçınmak için sözdizimsel şekeri serpebilir