简体   繁体   中英

How to assign a variable name to each index of an array?

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

I want to assign each item of the array above to a variable. For example,

TestName = TestResults[0];

I am getting the message: A field initializer cannot reference the non static field, method or property" when I do the following:

public string TestName = TestResults[0];

Please suggest me how can I resolve this.

You can't do that in a variable initializer, basically... although the value would be null anyway. You can't refer to this within a variable initializer, so you'd have to write:

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];
    }
}

Note that this would only retrieve the value at construction anyway. It wouldn't associate the variable itself with the first element in the array; either could change without affecting the other. If you want TestName to always be associated with TestResults[0] you might want to use a property instead:

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; }
    }
}

You seem to assume that, if your code worked, TestName becomes an alias for TestResults[0] , such that reading from or writing to that variable also changes the array. This is not the case.

What you can do, is using a property for this:

public string[] TestResults;

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

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

If you are looking to have a synonym for the index of the array you can use the following:

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

This creates a set of methods called a property that are called in a syntax similar to a variable. You can drop the set part if you don't want write access externally.

If you want a copy of the variable you will need to write to it at some other point such as in the constructor.

This happens because

public string TestName = TestResults[0];

Will set TestName to the same instance of string that is stored in TestResults[0]. In other words, TestName will be a reference to the object stored in TestResults[0], not a reference to the memory address that is TestResults[0].

Depending on how your code is set up, I would just use properties and their getters:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM