有没有一种方法可以创建一个静态只读数组,但这些值是在构建时计算的
本文关键字:计算 构建 静态 方法 一种 创建 只读 有没有 一个 数组 | 更新日期: 2023-09-27 18:08:46
有没有一种方法可以创建一个具有只读值的静态数组,但使用一些逻辑来创建它?让我试着解释一下:
我知道我能做到:
public static readonly int[] myArray = { 1, 2, 3 };
但是有可能做这样的事情吗:
public static readonly int[] myArray2 =
{
for (int i = 0; i < 256; i++)
{
float[i] = i;
}
};
编辑时间:一个很好的解决我的问题:静态构造函数!http://msdn.microsoft.com/en-us/library/k9x6w0hc%28v=VS.100%29.aspx:D
您可以做的是:
public class YourClass
{
public static readonly int[] myArray2 = null;
static YourClass()
{
myArray2 = new int[256];
for (int i = 0; i < 256; i++)
{
myArray2 [i] = i;
}
}
}
或者:
public static readonly int[] myArray2 = Enumerable.Range(0, 255).ToArray();
是的,试试看:
public static readonly IEnumerable<int> myArray = CreateValues();
public static IEnumerable<int> CreateValues()
{
return new int[] { 1, 2, 3 };
}
public static readonly int[] Array = CreateArray();
private static int[] CreateArray()
{
return new[] { 1, 2, 3, 4, 5 };
}
"readonly"应用于数组实例,而不是其内容。因此,您将无法替换原始数组或修改大小。但是,数组的单元格没有限制,可以随时修改。
public static readonly int[] myArray2 = ((Func<int[]>)(() => {
var array = new int[] { 1, 2, 3 };
return array;
}))();
更不可读Javascript没有教会你什么吗?:-(
(注意,这只是一个笑话!它之所以有趣,是因为它向您展示了C#编译器无法自动发现这个lambda函数的类型(
在Javascript中,你会写一些类似的东西:
// ILLEGAL IN C#!!! DANGER, WILL ROBINSON!
public static readonly int[] myArray2 = (() => {
var array = new int[] { 1, 2, 3 };
return array;
})();
现在我来看看"工作"的C#方式(哦!恐怖!(
public static readonly int[] myArray2 = (
(Func<int[]>) /* <-- The cast to Func<int[]> delegate */
(
/* Start Declaration --> */
() => { var array = new int[] { 1, 2, 3 }; return array;
} /* <-- End Declaration */
)
)
(); /* <-- Here we call it! */
实际上关键字readonly
意味着您只能将变量分配/修改到构造函数中。
public static readonly int[] values = Enumerable.Range(0, 256).ToArray();
甚至
public static readonly IEnumerable<int> values = Enumerable.Range(0, 256).ToArray();
请参阅MSDN。