배열의 카운트 속성에 액세스 할 수는 없지만 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는 .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에서도 사용할 수있는 멋진 기능도 있습니다. :)
제휴하지 않습니다 StackOverflow