C#中多维数组double[,]和数组数组之间有什么区别double[][]?
如果有差异,每个人的最佳用途是什么?
要回答的事情:
不要担心差异,而有问题的项目则Array不是T[].
多维数组的类似情况是[ 这里 ]
也就是说,N-dims到线性变换总是可行的.所以这个问题引起了我的注意,因为它已经实现IList了线性索引器.
题:
在我的代码中,我有以下声明:
public static Array ToArray<T>(this T source); 
我的代码知道如何使souce礼物成为一个数组(在运行时).我正试图让消费代码直接访问其索引器.但如果没有"作为IList",它就不可能完成. 
要返回object[]可能需要额外的转换/转换,这就是我要阻止做的事情. 
我能做的是:
public static IList ToArray<T>(this T source); 
但我认为一个名为ToArrayreturn的方法IList看起来很奇怪.
因此,我对此感到困惑:
在声明中Array,有
object IList.this[int index];
这样我们就可以
Array a;
a=Array.CreateInstance(typeof(char), 1);
(a as IList)[0]='a';
但我们做不到
a[0]='a';
除非它被宣布为
public object this[int index]; 
我能看到的唯一区别是它需要我们通过IList实现它的接口显式地使用它的索引器,但为什么呢?有好处吗?或者是否存在暴露问题?
为什么GetType().Name在字符串数组上进行调用Object[]而不是String[]?这似乎发生在任何元素类型中,例如Import-Csv会给你一个Object[]但每个元素都是一个PSCustomObject.
这是一个带数组的例子 String
$x = @('a','b','c')
$x[0].GetType().Name #String
$x.GetType().Name #Object[]
我完全理解System.Array是不可变的.
鉴于此,为什么它有一个Add()方法?
它没有出现在Get-Member的输出中.
$a = @('now', 'then')
$a.Add('whatever')
是的,我知道这失败了,我知道它失败的原因.我不是要求使用[System.Collections.ArrayList]或建议[System.Collections.Generic.List[object]].
我是编程和.net的新手,我很难理解为什么使用List<T>(IEnumerable<T>)构造函数接受使用创建的数组[],但不接受使用创建的数组Array.CreateInstance(Type, Int32).
这是有效的:
DirectoryInfo[] dirsArray = foo.GetDirectories();
List<DirectoryInfo> dirsList = new List<DirectoryInfo>(dirsArray);
这不是:
 Array dirsArray = Array.CreateInstance(typeof(DirectoryInfo), 10); //assume we know 10 is the required length
 List<DirectoryInfo> dirsList = new List<DirectoryInfo>(dirsArray);
以上给出了以下编译器错误:
Error   1   The best overloaded method match for 'System.Collections.Generic.List<System.IO.DirectoryInfo>.List(System.Collections.Generic.IEnumerable<System.IO.DirectoryInfo>)' has some invalid arguments
Error   2   Argument 1: cannot convert from 'System.Array' to 'System.Collections.Generic.IEnumerable<System.IO.DirectoryInfo>'
但我知道List<T>(IEnumerable<T>)可以接受任何IEnumerable作为论据.我知道那System.Array是IEnumerable.不仅因为它在引用中,而且因为使用[]构造函数语法的第一个示例工作正常.
那么这里的问题是什么?是否Array.CreateInstance以某种方式设法创建一个数组,是不是IEnumerable?
我正在尝试从列表中删除最后两行,使用文本文档我这样做:
var lines = System.IO.File.ReadAllLines(doc.txt); 
System.IO.File.WriteAllLines(doc.txt, lines.Take(lines.Length - 2).ToArray());
但是当我试图对列表做同样的事情时
 List<string> myList = new List<string>();
这样,我没有结果:
myList.RemoveAt(myList.Count - 2);