相关疑难解决方法(0)

数组与List <T>:何时使用哪个?

MyClass[] array;
List<MyClass> list;
Run Code Online (Sandbox Code Playgroud)

当一个优于另一个时,有什么情况?为什么?

.net arrays list

561
推荐指数
7
解决办法
28万
查看次数

何时使用IList以及何时使用List

我知道IList是接口,List是具体类型,但我仍然不知道何时使用每一个.我现在正在做的是如果我不需要使用该接口的Sort或FindAll方法.我对吗?有没有更好的方法来决定何时使用界面或具体类型?

.net c#

174
推荐指数
7
解决办法
13万
查看次数

你能用一个好的C#例子来解释Liskov Substitution Principle吗?

你能用一个很好的C#例子解释Liskov替换原理(SOLID的'L'),以简化的方式涵盖原理的所有方面吗?如果真的有可能.

.net c# oop liskov-substitution-principle solid-principles

90
推荐指数
2
解决办法
5万
查看次数

IEnumerable和Array,IList和List之间有什么区别?

IEnumerable和之间有什么区别Array

IList和之间有什么区别List

这些似乎具有相同的功能.

c#

87
推荐指数
4
解决办法
5万
查看次数

返回IList <T>比返回T []或List <T>更糟糕吗?

像这样的问题的答案:List <T>或IList <T>似乎总是同意返回一个接口比返回一个集合的具体实现更好.但我正在努力解决这个问题.实例化接口是不可能的,因此如果您的方法返回一个接口,它实际上仍然返回一个特定的实现.我通过编写两个小方法来尝试一下这个:

public static IList<int> ExposeArrayIList()
{
    return new[] { 1, 2, 3 };
}

public static IList<int> ExposeListIList()
{
    return new List<int> { 1, 2, 3 };
}
Run Code Online (Sandbox Code Playgroud)

并在我的测试程序中使用它们:

static void Main(string[] args)
{
    IList<int> arrayIList = ExposeArrayIList();
    IList<int> listIList = ExposeListIList();

    //Will give a runtime error
    arrayIList.Add(10);
    //Runs perfectly
    listIList.Add(10);
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,当我尝试添加新值时,我的编译器没有给我任何错误,但显然IList<T>当我尝试向其添加内容时,将我的数组公开为暴露的方法会产生运行时错误.因此,那些不知道我的方法中发生了什么,并且必须为其添加值的人,被迫首先将我复制IList到a List以便能够添加值而不会有错误.当然,他们可以做一个类型检查,看看他们是否正在处理a List或者a Array,但是如果他们不这样做,并且他们想要将项目添加到集合中,他们别无选择将其复制IList到a List,即使它已经是一个List.数组永远不会暴露为IList

我的另一个问题是基于相关问题的接受答案(强调我的):

如果您通过其他人将使用的库公开您的类, …

.net c# abstraction interface

80
推荐指数
5
解决办法
4601
查看次数

为什么公开List <T>被认为是不好的?

根据FXCop,List不应该在API对象模型中公开.为什么这被认为是不好的做法?

c# fxcop

57
推荐指数
3
解决办法
2万
查看次数

如何在没有在C#中实现属性"Count"的情况下实现IList <T>?

很长一段时间我都对以下内容感到好奇:

int[] array = new int[1];
int iArrayLength = array.Length;    //1
Run Code Online (Sandbox Code Playgroud)

由于数组实现了IList接口,因此允许以下内容:

int iArrayCount = ((IList<int>)array).Count;    //still 1
Run Code Online (Sandbox Code Playgroud)

但:

int iArrayCount = array.Count;  //Compile error. WHY?
int iArrayLength = array.Length;    //This is what we learned at school!
Run Code Online (Sandbox Code Playgroud)

问题:如何IList<T>在不允许在基类上使用数组的情况下实现(特别是int Count { get; }属性IList<T>)?

c# arrays list

25
推荐指数
2
解决办法
1250
查看次数

IList麻烦.固定尺寸?

我有这个代码:

IList<string> stelle = stelleString.Split('-');

if (stelle.Contains("3"))
    stelle.Add("8");

if (stelle.Contains("4"))
    stelle.Add("6");
Run Code Online (Sandbox Code Playgroud)

但似乎IList在.Split()之后有一个固定的大小:System.NotSupportedException:Collection是固定大小的.

我该如何解决这个问题?

c# collections ilist

18
推荐指数
2
解决办法
2万
查看次数

为什么System.Array类实现IList但不提供Add()

这段代码:

int[] myArr = { 1, 2 };
myArr.Add(3);
Run Code Online (Sandbox Code Playgroud)

投掷构建:

错误CS1061:'System.Array'不包含'Add'的定义,并且没有扩展方法'Add'接受类型'System.Array'的第一个参数可以找到(你是否缺少using指令或汇编引用? )

IList接口有Add()方法,但为什么Array没有实现呢?

更新:我从答案中看到它明确地实现了它,好吧,我明白了,谢谢你,我应该更好地坚持这个问题:

为什么Array实际上没有提供 Add(),或者更好,为什么它必须首先实现IList?相反实施的IList,也可能是另一个接口(例如IArray)可能只对数组成员有用的IList-例如IsFixedSize,IsReadOnly,IndexOf()...只是一个想法.

c# list system.array

10
推荐指数
2
解决办法
2130
查看次数

IList <T>数组和Collection是只读ERROR

在修复一个项目中的bug时发现有趣的问题

IList<int> a =new List<int>();
var b = new int[2];
b[0] = 1;
b[1] = 2;
a = b;
a.Clear();
Run Code Online (Sandbox Code Playgroud)

此代码在a.Clear()上抛出异常; 我知道如何解决它,但我没有明确得到导致此NotSupported异常的所有步骤.为什么编译器没有抛出编译时错误?

.net c#

9
推荐指数
1
解决办法
2120
查看次数