I can not access Count property of the array but through casting to ICollection !

后端 未结 3 1458
遇见更好的自我
遇见更好的自我 2021-01-23 08:26
        int[] arr = new int[5];
        Console.WriteLine(arr.Count.ToString());//Compiler Error
        Console.WriteLine(((ICollection)arr).Count.ToString());//works p         


        
相关标签:
3条回答
  • 2021-01-23 08:58

    Arrays have .Length, not .Count.

    But this is available (as an explicit interface implementation) on ICollection etc.

    Essentially, the same as:

    interface IFoo
    {
        int Foo { get; }
    }
    class Bar : IFoo
    {
        public int Value { get { return 12; } }
        int IFoo.Foo { get { return Value; } } // explicit interface implementation
    }
    

    Bar doesn't have public a Foo property - but it is available if you cast to IFoo:

        Bar bar = new Bar();
        Console.WriteLine(bar.Value); // but no Foo
        IFoo foo = bar;
        Console.WriteLine(foo.Foo); // but no Value
    
    0 讨论(0)
  • 2021-01-23 09:09

    Whilst this doesn't answer your question directly, if you are using .NET 3.5 you can include the namespace;

    using System.Linq;
    

    which will then allow you to use a Count() method, similar to when casting your int array as an ICollection.

    using System.Linq;
    
    int[] arr = new int[5];
    int int_count = arr.Count();
    

    You also then have a whole host of nice functions you can use in Linq too :)

    0 讨论(0)
  • 2021-01-23 09:10

    While System.Array implement the ICollection interface it doesn't directly expose the Count property. You can see the explicit implementation of ICollection.Count in the MSDN documentation here.

    The same applies to IList.Item.

    Take look at this Blog entry for more details on explicit and implicit interface implementation: Implicit and Explicit Interface Implementations

    0 讨论(0)
提交回复
热议问题