相关疑难解决方法(0)

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

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

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

.net arrays list

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

轻松创建支持C#索引的属性

在C#中,我发现索引属性非常有用.例如:

var myObj = new MyClass();
myObj[42] = "hello"; 
Console.WriteLine(myObj[42]);
Run Code Online (Sandbox Code Playgroud)

但据我所知,没有语法糖支持自己支持索引的字段(如果我错了请纠正我).例如:

var myObj = new MyClass();
myObj.field[42] = "hello"; 
Console.WriteLine(myObj.field[42]);
Run Code Online (Sandbox Code Playgroud)

我需要这样做的原因是,我已经用我的分类的索引属性,但我 GetNumX(),GetX()SetX()功能如下:

public int NumTargetSlots {  
    get { return _Maker.NumRefs; }  
}
public ReferenceTarget GetTarget(int n) {
    return ReferenceTarget.Create(_Maker.GetReference(n));
}
public void SetTarget(int n, ReferenceTarget rt) {
    _Maker.ReplaceReference(n, rt._Target, true);
}
Run Code Online (Sandbox Code Playgroud)

你可能会看到将这些暴露为一个可索引的字段属性会更有意义.我可以编写一个自定义类来实现这一点,每次我想要语法糖,但所有的样板代码似乎都没有必要.

所以我编写了一个自定义类来封装样板,并且可以轻松创建可以编制索引的属性.这样我可以添加一个新属性,如下所示:

public IndexedProperty<ReferenceTarget> TargetArray  {
    get { 
       return new IndexedProperty<int, ReferenceTarget>(
           (int n) => GetTarget(n), 
           (int n, ReferenceTarget rt) => SetTarget(n, …
Run Code Online (Sandbox Code Playgroud)

c# properties indexed-properties

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

IEnumerable <T>的作用是什么?我为什么要使用它?

IEnumerable<T>什么时候可以使用...我说List<T>什么?前者优于后者有什么优势?

c# collections ienumerable

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

C#函数参数Array vs List

我正在编写一个简单的C#类来处理特定竞赛中的SQL查询.大多数查询将是SELECT3-4个参数的语句,应该正确转义,所以函数将是这样的

public DataTable Select(string query, string[] parameters) {
    # some code
}
Run Code Online (Sandbox Code Playgroud)

应该parameters是一个Array还是一个List<>?在这两种类型作为功能参数进行选择时是否有一些最佳实践,还是只是偏好问题?

PS我通常更喜欢List<>因为灵活性,但在这里创造一个动态的可能性Array是一个好点.

c# arrays parameters function list

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

我需要在C#中创建2D数组

我需要创建2D锯齿状数组.想想一个矩阵.行数是已知的,列数是未知的.例如,我需要创建10个元素的数组,其中每个元素的类型为string [].我为什么需要那个?列数是未知的 - 此函数必须简单地执行分配并将数组传递给其他函数.

string[][] CreateMatrix(int numRows)
{
 // this function must create string[][] where numRows is the first dimension.
}
Run Code Online (Sandbox Code Playgroud)

UPDATE

我有C++背景.在C++中,我会编写以下内容(从不修改语法)

double ** CreateArray()
{
 double **pArray = new *double[10]() // create 10 rows first
}
Run Code Online (Sandbox Code Playgroud)

更新2

我正在考虑使用List,但我需要对行和列进行索引访问.

.net c# arrays multidimensional-array

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