لا يمكنني الوصول إلى خاصية Count الخاصة بالمصفوفة ولكن من خلال الإرسال إلى ICollection!

StackOverflow https://stackoverflow.com/questions/1031583

  •  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();

ويمكنك أيضا بعد ذلك مجموعة كاملة من وظائف لطيفة التي يمكنك استخدامها في ينق أيضا:)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top