IList vs List

17 浏览
0 Comments

IList vs List

你能帮我理解这两者之间的实际差异吗?\n

IList myList = new List();
List myList = new List();

0
0 Comments

一、问题的原因:

问题的原因是在于使用`IList`和`List`之间的差异。`IList`是一个接口,可以被任何类实现,而`List`是一个具体的类,它继承自`IList`接口。因此,使用`IList`作为参数和属性可以使耦合度更低,不限制于一种具体的实现。

二、解决方法:

要解决这个问题,可以考虑以下几种方法:

1. 使用`IList`作为参数和属性:

   public void ProcessItems(IList items)
   {
       // 处理代码
   }
   

这样做的好处是,可以接受任何实现了`IList`接口的类的实例作为参数,增加了代码的灵活性和可扩展性。

2. 使用`List`作为参数和属性:

   public void ProcessItems(List items)
   {
       // 处理代码
   }
   

如果确切知道只会使用`List`类的实例作为参数,也可以直接使用`List`作为参数和属性的类型。这样做可以省略了接口的抽象层,提高了代码的执行效率。

3. 根据具体需求选择合适的类型:

   public void ProcessItems(IEnumerable items)
   {
       // 处理代码
   }
   

如果不需要对列表进行修改操作,只需要对其进行遍历或者读取操作,可以将参数和属性的类型设置为`IEnumerable`。`IEnumerable`是一个更为抽象的接口,可以接受任何可枚举的集合类型作为参数,包括数组、列表等。

以上是解决`IList`和`List`之间差异的几种方法,具体的选择应根据实际需求和代码的灵活性来决定。

0
0 Comments

在上述代码中,出现了(IList vs List)这个问题。问题的原因是因为List和BindingList都实现了IList接口,所以可以通过IList类型的变量来访问它们。但是如果变量的类型是List,而返回所需数据的方法返回的是BindingList,那么就需要将返回的BindingList的所有成员添加到一个新的List中,或者编写另一个方法来处理。

为了解决这个问题,可以通过将变量的类型更改为IList来解决。这样,无论返回的是List还是BindingList,都可以直接赋值给变量,而无需额外的处理。修改后的代码如下:

IList myList;
if (x == true)
    myList = getBindngList();
else
    myList = getList();
public BindingList getBindingList()
{
    // do important things...
    return new BindingList();
}
public List getList()
{
    // do important things...
    return new List();
}

通过这样的修改,可以确保无论返回的是List还是BindingList,都可以直接赋值给myList变量,而无需进行额外的处理。这样可以简化代码,并提高代码的可读性和可维护性。

0
0 Comments

(IList vs List)问题的出现原因是因为在声明和实例化集合对象时使用了不同的类型。其中,IList是一个接口类型,而List是一个具体类类型。

解决方法是根据具体需求来选择使用哪种类型。如果只需要使用到接口IList中定义的方法,可以选择声明和实例化一个IList类型的对象。这样做的好处是可以提高代码的可维护性和扩展性,因为如果将来需要更换具体的集合类,只需要修改声明和实例化的部分即可。

如果需要使用到List类中特有的方法和属性,或者对性能有较高的要求,可以选择声明和实例化一个List类型的对象。List类是一个具体实现了IList接口的类,除了继承了IList接口中的方法外,还有一些额外的方法和属性可以使用。

根据需要选择不同的类型可以更好地满足程序的需求。在使用接口类型时,可以使代码更加灵活,并且提高了代码的可扩展性。而在使用具体类类型时,可以获得更多的特性和性能上的优化。

总之,选择(IList vs List)要根据具体需求来决定,权衡接口的灵活性和具体类的特性和性能。

0