لا يمكنني الوصول إلى خاصية Count الخاصة بالمصفوفة ولكن من خلال الإرسال إلى ICollection!
-
06-07-2019 - |
سؤال
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
هل لديك تفسير لذلك؟
المحلول
تحتوي المصفوفات على .Length، وليس .Count.
ولكن هذا متاح (ك تنفيذ واجهة واضحة) على ICollection وما إلى ذلك.
في الأساس، نفس:
interface IFoo
{
int Foo { get; }
}
class Bar : IFoo
{
public int Value { get { return 12; } }
int IFoo.Foo { get { return Value; } } // explicit interface implementation
}
Bar
ليس لديه عامة أ Foo
الملكية - ولكنها متاحة إذا ألقيت عليها IFoo
:
Bar bar = new Bar();
Console.WriteLine(bar.Value); // but no Foo
IFoo foo = bar;
Console.WriteLine(foo.Foo); // but no Value
نصائح أخرى
بينما System.Array
تنفيذ ICollection
الواجهة لا تعرض الملف مباشرة Count
ملكية.يمكنك ان ترا ال صريحة بداية شئ ICollection.Count
في وثائق MSDN هنا.
الأمر نفسه ينطبق على IList.Item
.
ألق نظرة على إدخال المدونة هذا للحصول على مزيد من التفاصيل حول تنفيذ الواجهة الصريحة والضمنية: تطبيقات الواجهة الضمنية والصريحة
ومع أن هذا لا يجيب على سؤالك <م> مباشرة م>، إذا كنت تستخدم الصافي 3.5 يمكنك تضمين مساحة الاسم؛
using System.Linq;
والتي سوف ثم تسمح لك باستخدام طريقة عدد ()، على غرار عندما صب مجموعة كثافة العمليات الخاص باعتباره ICollection.
using System.Linq;
int[] arr = new int[5];
int int_count = arr.Count();
ويمكنك أيضا بعد ذلك مجموعة كاملة من وظائف لطيفة التي يمكنك استخدامها في ينق أيضا:)