[英]How to assign a variable name to each index of an array?
public string[] TestResults = new string[8];
我想将上面数组的每个项目分配给一个变量。 例如,
TestName = TestResults[0];
我收到消息:当我执行以下操作时,字段初始值设定项无法引用非 static 字段、方法或属性:
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] 中的 object 的引用,而不是对作为 TestResults[0] 的 memory 地址的引用。
根据您的代码的设置方式,我将只使用属性及其吸气剂:
public string TestName
{
get { return TestResults[0]; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.