如何修改list <t>中的值?</t>

时间:2011-07-23 14:20:20

标签: c#

    class SomeClass
    {

        private struct PhraseInfo
        {
            public int Start;
            public int Length;
        }

...

        private void SomeMethod(...)
        {
            List<PhraseInfo> posesBracket = new List<PhraseInfo>();
            posesBracket.Add(new PhraseInfo());
            posesBracket[0].Start = 10;
        }

of cause,posesBracket [0] .start = 10;发生编译错误CS1612:“无法修改'表达式'的返回值,因为它不是变量”

如何修改列表中的值?

3 个答案:

答案 0 :(得分:9)

问题是PhraseInfo是一个值类型,所以this []方法将返回一个值而不是一个引用来解决它,执行此操作:

PhraseInfo pi = posesBracket[0];
pi.Start = 10;
posesBracket[0] = pi;

答案 1 :(得分:1)

var temp = posesBracket[0];
temp.Start = 10;
posesBracket[0] = temp;

答案 2 :(得分:1)

您不能将结构定义为方法。正如他们所说,你需要改变价值观的参考。所以它是这样的:

class SomeClass
    {

        private struct PhraseInfo
        {
            public int Start;
            public int Length;
        }

        private void somemethod()
        {
            List<PhraseInfo> posesBracket = new List<PhraseInfo>();
            posesBracket.Add(new PhraseInfo());
            PhraseInfo pi = posesBracket[0];
            pi.Start = 10;
            posesBracket[0] = pi;
        }
    }