【问题标题】:List interface: from Java to C#List接口:从Java到C#
【发布时间】:2011-10-27 07:15:30
【问题描述】:

我是一名 Java 程序员,最近正在学习 C#。

通常在 Java 中使用列表时,最好针对其接口进行编程,以便在实现之间切换:

List<Object> list = new ArrayList<Object>();
//or
list = new LinkedList<Object>(); 

C# 呢?是否存在类似的方法?有人可以给我看一个例子吗?从现在开始我正在以这种方式构建一个列表,但我不认为 List 是一个接口:

List<int> list = new List<int>();
list.Add(2);

【问题讨论】:

    标签: c# java list interface generic-collections


    【解决方案1】:

    在 .NET 中,最好使用层次结构中可能的最高对象。您可以使用IList&lt;T&gt; 接口:

    IList<int> list = new List<int>();
    list.Add(2);
    

    如果您不需要按索引访问列表,您还可以使用层次结构中更高的ICollection&lt;T&gt; 接口。

    或者,如果您只想通过列表进行枚举,您可以使用可能的最高接口IEnumerable&lt;T&gt;

    IEnumerable<int> list = new List<int>(new[] { 1, 2, 3 });
    foreach(int item in list)
    {
        ...
    }
    

    【讨论】:

      【解决方案2】:
      IList<int> = new List<int>();
      

      在 C# 中这很简单 - 如果它以 I 开头,它就是一个接口。

      【讨论】:

        【解决方案3】:

        List&lt;T&gt; 实现了许多接口,包括IList&lt;T&gt;ICollection&lt;T&gt;。您可能需要检查您的代码以确定最合适的接口。

        【讨论】:

        • 谢谢..你能用几句话解释一下IList和ICollection的区别吗?
        • @Heisenbug - 我链接到他们的文档,@Darin 已经解释了一个关键区别 - IList&lt;T&gt; 支持索引访问。
        【解决方案4】:

        在.net IList&lt;T&gt; 是接口。您可以为其分配任何接口的实现,例如List&lt;T&gt;。看这个接口的实现:http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx#inheritanceContinued

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-12-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-06
          • 1970-01-01
          • 1970-01-01
          • 2022-10-19
          相关资源
          最近更新 更多