在我编程的时候,我还没有看到一个实例,其中数组比其他形式更适合存储信息.我确实认为编程语言中增加的"特性"已经改进了,并且取而代之.我现在看到他们没有被取代,而是被赋予了新的生命,可以这么说.
那么,基本上,使用数组有什么意义呢?
这不是为什么我们从计算机的角度使用数组,而是为什么我们从编程的角度使用数组(一个细微的差别).计算机对阵列的作用不是问题的关键.
请参阅System.Array类的定义
public abstract class Array : IList, ...
Run Code Online (Sandbox Code Playgroud)
从理论上讲,我应该能够写下这一点,并感到高兴
int[] list = new int[] {};
IList iList = (IList)list;
Run Code Online (Sandbox Code Playgroud)
我也应该可以从iList中调用任何方法
ilist.Add(1); //exception here
Run Code Online (Sandbox Code Playgroud)
我的问题不是为什么我得到一个例外,而是为什么Array实现了IList?
您可能知道,C#中的数组实现IList<T>了其他接口.但不知何故,他们这样做没有公开实现Count属性IList<T>!数组只有一个Length属性.
这是一个明显的例子,C#/ .NET打破了自己关于接口实现的规则,还是我错过了什么?
我正在努力理解这部分语言背后的设计决策.我承认我对这一切都很陌生,但这最初引起了我的注意,我想知道我是否错过了一个明显的原因.请考虑以下代码:
List<int> MyList = new List<int>() { 5, 4, 3, 2, 1 };
int[] MyArray = {5,4,3,2,1};
//Sort the list
MyList.Sort();
//This was an instance method
//Sort the Array
Array.Sort(MyArray);
//This was a static method
Run Code Online (Sandbox Code Playgroud)
为什么它们不是以相同的方式实现 - 直观地说,如果它们都是实例方法会更有意义吗?
我基本上想知道在下面提到的场景中使用通用列表而不是数组的差异或优点
class Employee
{
private string _empName;
public string EmpName
{
get{ return _empName; }
set{ _empName = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
1. Employee[] emp
2. List<Employee> emp
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我优点或缺点,以及哪一个更喜欢?
我总是被告知在数组中添加元素的方式如下:
创建数组+ 1element的空副本,然后将原始数组中的数据复制到其中,然后加载新元素的新数据
如果这是真的,那么由于内存和CPU利用率的原因,在需要大量元素活动的场景中使用数组是正确的,对吗?
如果是这种情况,你是否应该尽量避免在添加大量元素时尽可能多地使用数组?你应该使用iStringMap吗?如果是这样,如果您需要两个以上的维度并且需要添加大量元素添加,会发生什么.你刚刚受到性能打击还是应该使用其他东西?
我想知道哪种类型会有更好的性能以及您认为应该使用哪种类型.
例如,我有一个字符串列表,不知道我需要多少项,因此.Add(String)函数非常方便.我可以随时轻松地将新字符串添加到列表中.
使用每个的优点/缺点是什么?
列出新阵列?
我最近了解到您可以创建一些具有无限参数的方法,例如:
SomeMethod(params int[] numbers);
Run Code Online (Sandbox Code Playgroud)
但我的问题是,这与仅创建一个接收列表或数组的方法有什么区别?
SomeMethod(int[] numbers);
SomeMethod(List<int> numbers);
Run Code Online (Sandbox Code Playgroud)
也许它对性能有一些影响?我不完全理解或看到您更喜欢具有无限参数的方式。
在谷歌上快速搜索没有帮助,我希望你能帮助我。
我收到以下错误之一:
它是什么意思,我该如何解决?
我有一个IEnumerable<T>,我需要它的副本.任何实现的东西IEnumerable<T>都可以.什么是最便宜的复制方式?.ToArray()也许?
c# ×9
.net ×5
arrays ×5
collections ×1
generic-list ×1
ilist ×1
interface ×1
liskov-substitution-principle ×1
list ×1
methods ×1
performance ×1
theory ×1