배열의 카운트 속성에 액세스 할 수는 없지만 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는 .length, .count가 아닙니다.

그러나 이것은 사용할 수 있습니다 (an 명시 적 인터페이스 구현) 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.

명시적이고 암시적인 인터페이스 구현에 대한 자세한 내용은이 블로그 항목을 살펴보십시오. 암시적이고 명시적인 인터페이스 구현

이것은 당신의 질문에 대답하지 않습니다 곧장, .NET 3.5를 사용하는 경우 네임 스페이스를 포함시킬 수 있습니다.

using System.Linq;

그러면 int 배열을 iCollection으로 캐스팅 할 때와 유사한 count () 메소드를 사용할 수 있습니다.

using System.Linq;

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

그런 다음 LINQ에서도 사용할 수있는 멋진 기능도 있습니다. :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top