如何为数组的每个索引分配变量名
本文关键字:索引 分配 变量名 数组 | 更新日期: 2023-09-27 17:59:13
public string[] TestResults = new string[8];
我想把上面数组的每一项都分配给一个变量。例如,
TestName = TestResults[0];
当我执行以下操作时,我得到的消息是:字段初始值设定项不能引用非静态字段、方法或属性:
public string TestName = TestResults[0];
请建议我如何解决这个问题。
在变量初始值设定项中不能做到这一点,基本上。。。尽管该值无论如何都将为null。不能在变量初始值设定项中引用this
,因此必须编写:
public class Foo
{
// I hope your fields aren't really public...
public string[] TestResults = new string[8];
public string TestName;
public Foo()
{
TestName = TestResults[0];
}
}
请注意,无论如何,这只会在构造时检索值。它不会将变量本身与数组中的第一个元素相关联;任何一方都可以在不影响另一方的情况下改变。如果希望TestName
到始终与TestResults[0]
关联,则可能需要使用一个属性:
public class Foo
{
// I hope your fields aren't really public...
public string[] TestResults = new string[8];
public string TestName
{
get { return TestResults[0]; }
set { TestResults[0] = value; }
}
}
您似乎认为,如果代码有效,TestName
将成为TestResults[0]
的别名,因此读取或写入该变量也会更改数组。事实并非如此。
你能做的是使用一个属性:
public string[] TestResults;
public MyClass()
{
TestResults = new string[8];
}
public string TestName
{
get { return TestResults[0]; }
set { TestResults[0] = value; }
}
如果您希望拥有数组索引的同义词,可以使用以下内容:
public string TestName
{
get { return TestResults[0]; }
set { TestResults[0] = value; }
}
这将创建一组称为属性的方法,这些方法以类似于变量的语法进行调用。如果不希望从外部进行写访问,则可以删除set
部分。
如果你想要一个变量的副本,你需要在其他地方写入它,比如在构造函数中。
发生这种情况是因为
public string TestName = TestResults[0];
将TestName设置为存储在TestResults[0]中的字符串的同一实例。换句话说,TestName将是对存储在TestResults[0]中的对象的引用,而不是对作为TestResults[2]的内存地址的引用。
根据代码的设置方式,我只会使用属性及其getter:
public string TestName
{
get { return TestResults[0]; }
}