数组作为属性.正在寻找填充数组的更简单方法
本文关键字:数组 填充 更简单 方法 寻找 属性 | 更新日期: 2023-09-27 18:03:10
我对C#很陌生,我看到了很多不太熟悉语法的代码。所以我想知道是否有更简单的方法来做我在这里做的事情:
我有一个具有各种属性和函数的类。其中之一是public int gettypeforitem(int i)
,它返回一个整数。我想定义一个类型为int[]
的属性,该属性返回所有项的类型的数组。
我来自C++,所以下面的代码对我来说似乎很有逻辑性,但我想知道在C#中是否有更"直接"的方法。非常感谢。
public int[] type
{
get
{
List<int> _list = new List<int>();
for(uint i=0; i<NumberOfItems;i++)
_list.Add(gettypeforitem(i));
return _list.ToArray();
}
}
LINQ是这里的前进之路,我想说:
public int[] Types => Enumerable.Range(0, NumberOfItems)
.Select(i => GetTypeForItem(i))
.ToArray();
我已经更改了名称以遵循.NET命名约定,这是使用C#的表达式体属性语法。
由于这要为一个属性做相对大量的工作——首先,每次调用都要生成一个新数组——您可能需要考虑将其作为一种方法:
public int[] GetTypes() => Enumerable.Range(0, NumberOfItems)
.Select(i => GetTypeForItem(i))
.ToArray();
正如其他地方的注释中所指出的,您可能能够使用方法组转换将参数转换为Select
方法:
public int[] GetTypes() => Enumerable.Range(0, NumberOfItems)
.Select(GetTypeForItem)
.ToArray();
当方法组转换作为参数有效时,我总是无法确定确切的规则,所以我不会在这里总结它们。(它们也随着时间的推移而变化。(
public int[] type
{
get
{
return Enumerable.Range(0, NumberOfItems).Select(gettypeforitem).ToArray();
}
}
更新:正如评论中所建议的,最好保留C#命名标准:
public int[] Types
{
get
{
return Enumerable.Range(0, NumberOfItems).Select(getTypeForItem).ToArray();
}
}
既然知道项目的数量,就可以直接创建一个数组:
int[] _arr = new int[NumberOfItems];
for(uint i=0; i<NumberOfItems;i++)
_arr[i] = gettypeforitem(i);
return _arr;
或者,如果你不在乎开销:
Enumerable.Range(0, NumberOfItems).Select(gettypeforitem).ToArray();
属性的返回类型必须是真正的数组吗?如果没有,你也可以使用这个:
public IEnumerable<int> type
{
get
{
for(uint i=0; i<NumberOfItems;i++)
yield return gettypeforitem(i);
}
}
然后:
myObject.type.ToArray();