Ich kann nicht Eigentum des Arrays Count Zugriff aber durch zu ICollection Gießen!
-
06-07-2019 - |
Frage
int[] arr = new int[5];
Console.WriteLine(arr.Count.ToString());//Compiler Error
Console.WriteLine(((ICollection)arr).Count.ToString());//works print 5
Console.WriteLine(arr.Length.ToString());//print 5
Haben Sie eine Erklärung dafür?
Lösung
Arrays haben .Length, nicht .Count.
Das ist aber vorhanden (als explizite Schnittstellenimplementierung ) auf ICollection etc.
Im Wesentlichen das gleiche wie:
interface IFoo
{
int Foo { get; }
}
class Bar : IFoo
{
public int Value { get { return 12; } }
int IFoo.Foo { get { return Value; } } // explicit interface implementation
}
Bar
hat nicht öffentlich eine Foo
Eigenschaft - aber es ist verfügbar, wenn Sie auf IFoo
Stimmen:
Bar bar = new Bar();
Console.WriteLine(bar.Value); // but no Foo
IFoo foo = bar;
Console.WriteLine(foo.Foo); // but no Value
Andere Tipps
Während System.Array
den ICollection
Schnittstelle implementieren ist es nicht direkt die Count
Eigenschaft aus. Sie können die explizite Implementierung von ICollection.Count
in der MSDN-Dokumentation hier .
Das gleiche gilt für IList.Item
.
Nehmen Sie für weitere Informationen über explizite und implizite Schnittstellen-Implementierung in diesem Blog-Eintrag aussehen: Implizite und explizite Schnittstellenimplementierungen
Während dies nicht beantwortet Ihre Frage direkt , wenn Sie .NET 3.5 verwenden, können Sie den Namespace enthalten;
using System.Linq;
die dann können Sie einen Count () -Methode, ähnlich wie verwenden, wenn Ihr int Array als ICollection Gießen.
using System.Linq;
int[] arr = new int[5];
int int_count = arr.Count();
Sie haben auch dann eine ganze Reihe von netten Funktionen, die Sie in Linq verwenden:)