相关疑难解决方法(0)

C#中多维数组和数组数组之间有什么区别?

C#中多维数组double[,]和数组数组之间有什么区别double[][]

如果有差异,每个人的最佳用途是什么?

c# jagged-arrays multidimensional-array

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

为什么Array类没有直接暴露其索引器?

要回答的事情:

  1. 不要担心差异,而有问题的项目则Array不是T[].

  2. 多维数组的类似情况是[ 这里 ]

也就是说,N-dims到线性变换总是可行的.所以这个问题引起了我的注意,因为它已经实现IList了线性索引器.


题:

在我的代码中,我有以下声明:

public static Array ToArray<T>(this T source); 
Run Code Online (Sandbox Code Playgroud)

我的代码知道如何使souce礼物成为一个数组(在运行时).我正试图让消费代码直接访问其索引器.但如果没有"作为IList",它就不可能完成. 要返回object[]可能需要额外的转换/转换,这就是我要阻止做的事情. 我能做的是:

public static IList ToArray<T>(this T source); 
Run Code Online (Sandbox Code Playgroud)

但我认为一个名为ToArrayreturn的方法IList看起来很奇怪.

因此,我对此感到困惑:

在声明中Array,有

object IList.this[int index];
Run Code Online (Sandbox Code Playgroud)

这样我们就可以

Array a;
a=Array.CreateInstance(typeof(char), 1);
(a as IList)[0]='a';
Run Code Online (Sandbox Code Playgroud)

但我们做不到

a[0]='a';
Run Code Online (Sandbox Code Playgroud)

除非它被宣布为

public object this[int index]; 
Run Code Online (Sandbox Code Playgroud)

我能看到的唯一区别是它需要我们通过IList实现它的接口显式地使用它的索引器,但为什么呢?有好处吗?或者是否存在暴露问题?

c# arrays ilist indexer

22
推荐指数
2
解决办法
3509
查看次数

Powershell中的数组类型 - System.Object []与具有特定类型的数组

为什么GetType().Name在字符串数组上进行调用Object[]而不是String[]?这似乎发生在任何元素类型中,例如Import-Csv会给你一个Object[]但每个元素都是一个PSCustomObject.

这是一个带数组的例子 String

$x = @('a','b','c')

$x[0].GetType().Name #String
$x.GetType().Name #Object[]
Run Code Online (Sandbox Code Playgroud)

arrays collections powershell types coercion

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

为什么System.Array对象有Add()方法?

我完全理解System.Array是不可变的.

鉴于此,为什么它有一个Add()方法?

它没有出现在Get-Member的输出中.

$a = @('now', 'then')
$a.Add('whatever')
Run Code Online (Sandbox Code Playgroud)

是的,我知道这失败了,我知道它失败的原因.我不是要求使用[System.Collections.ArrayList]或建议[System.Collections.Generic.List[object]].

arrays powershell interface

4
推荐指数
2
解决办法
162
查看次数

List <T>构造函数(IEnumerable <T>)不接受从Array.CreateInstance(Type,Int32)创建的数组

我是编程和.net的新手,我很难理解为什么使用List<T>(IEnumerable<T>)构造函数接受使用创建的数组[],但不接受使用创建的数组Array.CreateInstance(Type, Int32).

这是有效的:

DirectoryInfo[] dirsArray = foo.GetDirectories();
List<DirectoryInfo> dirsList = new List<DirectoryInfo>(dirsArray);
Run Code Online (Sandbox Code Playgroud)

这不是:

 Array dirsArray = Array.CreateInstance(typeof(DirectoryInfo), 10); //assume we know 10 is the required length
 List<DirectoryInfo> dirsList = new List<DirectoryInfo>(dirsArray);
Run Code Online (Sandbox Code Playgroud)

以上给出了以下编译器错误:

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>'
Run Code Online (Sandbox Code Playgroud)

但我知道List<T>(IEnumerable<T>)可以接受任何IEnumerable作为论据.我知道那System.ArrayIEnumerable.不仅因为它在引用中,而且因为使用[]构造函数语法的第一个示例工作正常.

那么这里的问题是什么?是否Array.CreateInstance以某种方式设法创建一个数组,是不是IEnumerable

.net c# arrays

2
推荐指数
1
解决办法
737
查看次数

如何从列表中删除最后两行

我正在尝试从列表中删除最后两行,使用文本文档我这样做:

var lines = System.IO.File.ReadAllLines(doc.txt); 
System.IO.File.WriteAllLines(doc.txt, lines.Take(lines.Length - 2).ToArray());
Run Code Online (Sandbox Code Playgroud)

但是当我试图对列表做同样的事情时

 List<string> myList = new List<string>();
Run Code Online (Sandbox Code Playgroud)

这样,我没有结果:

myList.RemoveAt(myList.Count - 2);
Run Code Online (Sandbox Code Playgroud)

c# indexing list

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