gpt4 book ai didi

c# - 为什么动态分配数组的大小必须是静态字段?

转载 作者:太空宇宙 更新时间:2023-11-03 19:34:40 24 4
gpt4 key购买 nike

我有一个虚拟类,我在其中测试数组。我注意到当我想在运行时动态分配数组大小时,指示此大小的字段必须是静态的。我知道我应该为这种代码使用集合,但我更感兴趣的是为什么这些字段必须是静态的?这背后有什么特别的原因吗?

class Foo
{
private static int x;
private static int y;

private int[,] bar = new int[ x, y ];

public Foo( int a, int b )
{
x = a;
y = b;
}
}

最佳答案

它们实际上不必是静态的——只是您不能在实例变量初始值设定项中引用其他实例变量。换句话说,它有点像这样:

class Foo
{
private int x;
private int y = x; // Invalid
}

来自 C# 3 规范的第 10.5.5.2 节:

A variable initializer for an instance field cannot reference the instance being created. Thus, it is a compile-time error to reference this in a variable initializer, as it is a compile-time error for a variable initializer to reference any instance member through a simple-name.

我怀疑你真的想要这样的东西:

class Foo
{
private int x;
private int y;

private int[,] bar;

public Foo( int a, int b )
{
x = a;
y = b;
bar = new int[x, y];
}
}

当然,您根本不需要xy - 它们只是方便保留数组的每个维度。您可以也可以使用bar.GetLength(0)bar.GetLength(1) 来获得这两个长度,但这不是很令人愉快。

不过,您可能希望将 xy 重命名为 widthheight,或者类似的名称:)

关于c# - 为什么动态分配数组的大小必须是静态字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2571230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com