如何为数组的每个索引分配变量名?

时间:2011-06-13 14:23:01

标签: c# arrays

public string[] TestResults = new string[8];

我想将上面数组的每个项目分配给变量。例如,

TestName = TestResults[0];

我收到消息:当我执行以下操作时,字段初始值设定项无法引用非静态字段,方法或属性:

public string TestName = TestResults[0];

请建议我如何解决此问题。

4 个答案:

答案 0 :(得分:3)

你不能在变量初始化器中做到这一点,基本上......尽管该值无论如何都是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; }
    }
}

答案 1 :(得分:3)

您似乎认为,如果您的代码有效,TestName将成为TestResults[0]的别名,这样读取或写入该变量也会更改数组。事实并非如此。

你能做什么,就是使用一个属性:

public string[] TestResults;

public MyClass()
{
    TestResults = new string[8];
}

public string TestName
{
    get { return TestResults[0]; }
    set { TestResults[0] = value; }
}

答案 2 :(得分:1)

如果您希望拥有数组索引的同义词,可以使用以下命令:

public string TestName
{
    get { return TestResults[0]; }
    set { TestResults[0] = value; }
}

这将创建一组称为属性的方法,这些方法以类似于变量的语法调用。如果您不希望从外部进行写访问,则可以删除set部分。

如果你想要一个变量的副本,你需要在其他一些点写入它,例如在构造函数中。

答案 3 :(得分:0)

这是因为

public string TestName = TestResults[0];

将TestName设置为存储在TestResults [0]中的字符串的同一实例。换句话说,TestName将是对TestResults [0]中存储的对象的引用,而不是对TestResults [0]的内存地址的引用。

根据代码的设置方式,我只会使用属性及其getter:

public string TestName
{
    get { return TestResults[0]; }
}