1
        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

你对此有什么解释吗?

4

3 回答 3

6

数组有 .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
于 2009-06-23T09:47:59.700 回答
3

System.Array实现ICollection接口时,它不会直接公开Count属性。您可以在此处查看MSDN 文档中的显式实现。ICollection.Count

这同样适用于IList.Item

查看此博客条目以获取有关显式和隐式接口实现的更多详细信息:隐式和显式接口实现

于 2009-06-23T09:51:02.017 回答
1

虽然这不能直接回答您的问题,但如果您使用的是 .NET 3.5,则可以包含命名空间;

using System.Linq;

这将允许您使用 Count() 方法,类似于将 int 数组转换为 ICollection 时。

using System.Linq;

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

然后,您还可以在 Linq 中使用一大堆不错的功能 :)

于 2009-06-23T09:53:43.667 回答