【发布时间】:2020-02-28 02:41:07
【问题描述】:
这是我的课:
class MyArray<T>
{
private T[] data;
public MyArray(int size)
{
data = new T[size];
}
public MyArray(in T[] array)
{
data = new T[array.Length];
for (int i = 0; i < array.Length; i++)
data[i] = array[i];
}
public T this[int i] //I am talking about this indexer
{
get => data[i];
set => data[i] = value;
}
}
我是否应该像这样定义我的索引器,而不是像上面那样做?
public ref T this[int i]
{
get => data[i];
}
我应该选择哪种方法?据我所知,方法 1 允许您在设置值时执行其他代码,但是方法 2 允许您执行类似 int.TryParse(str, out myArrayObj[i]);
编辑:这个问题不仅适用于索引器,而且一般适用于任何属性。
【问题讨论】:
-
我认为您已经回答了自己的问题。这两种方法支持不同的功能,哪一种对您来说更重要?
-
您应该选择最适合您需要的方法。
-
@Sach 好吧,
List<T>不会通过引用返回,但是在设置元素时它不会执行任何额外的代码。 -
@DarkAtom 我认为
List<T>是在C# 返回ref之前创建的,所以今天可能会有所不同。当然有理由(自动激活、模拟数组)希望它这样做。 -
数据类型(此处为
int)是原始类型还是引用类型有区别吗?