Bu neden bir derleyici hatası oluşturur kapsamaz:Neden bir koleksiyon başlatıcısı ifadesi IEnumerable uygulanmasını gerektirir?
class X { public void Add(string str) { Console.WriteLine(str); } }
static class Program
{
static void Main()
{
// error CS1922: Cannot initialize type 'X' with a collection initializer
// because it does not implement 'System.Collections.IEnumerable'
var x = new X { "string" };
}
}
ama bu değil:
class X : IEnumerable
{
public void Add(string str) { Console.WriteLine(str); }
IEnumerator IEnumerable.GetEnumerator()
{
// Try to blow up horribly!
throw new NotImplementedException();
}
}
static class Program
{
static void Main()
{
// prints “string” and doesn’t throw
var x = new X { "string" };
}
}
toplama başlatıcıları kısıtlayan sebebi nedir - Bir Add
yöntemi çağrısı için sözdizimsel şeker - olmayan bir arabirimi uygulayan sınıflar için ve Add
yöntemine sahip olan ve kullanılmayan?
geri,
IEnumerable
gerektiren nedeni sadece alamadım C# bazı şeyler vardır. Bu onlardan biri. Başka bir 'foreach'. – leppie@leppie: Foreach hakkında ne anlamıyorsun? –
@Jon Skeet: Bence leppie, derleyicinin, güçlü bir şekilde yazılan bir dilde bir tür ördek yazma davranışı olan belirli bir arabirime gerek duymadan basitçe bir yöntemin varlığını gerektirdiği gerçeğini ifade eder. –