C# 如何修改列表中的值<;t>;? class-SomeClass { 私有结构短语信息 { 公共int启动; 公共整数长度; } ... 私有方法(…) { List posesBracket=新列表(); 添加(新短语信息()); posesBracket[0].Start=10; }

C# 如何修改列表中的值<;t>;? class-SomeClass { 私有结构短语信息 { 公共int启动; 公共整数长度; } ... 私有方法(…) { List posesBracket=新列表(); 添加(新短语信息()); posesBracket[0].Start=10; },c#,C#,当然,posesBracket[0]。start=10;出现编译器错误CS1612:“无法修改“expression”的返回值,因为它不是变量” 如何修改列表中的值?问题在于,PhraseInfo是一种值类型,因此this[]方法将返回一个值,而不是引用。要解决此问题,请执行以下操作: class SomeClass { private struct PhraseInfo { public int Start;

当然,posesBracket[0]。start=10;出现编译器错误CS1612:“无法修改“expression”的返回值,因为它不是变量”


如何修改列表中的值?

问题在于,PhraseInfo是一种值类型,因此this[]方法将返回一个值,而不是引用。要解决此问题,请执行以下操作:

    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;
        }
var temp = posesBracket[0];
temp.Start = 10;
posesBracket[0] = temp;

不能将结构定义为方法。正如他们所说,您需要引用来更改值。因此如下所示:

PhraseInfo pi = posesBracket[0];
pi.Start = 10;
posesBracket[0] = pi;
class-SomeClass
{
私有结构短语信息
{
公共int启动;
公共整数长度;
}
私有方法()
{
List posesBracket=新列表();
添加(新短语信息());
PhraseInfo pi=posesBracket[0];
pi.Start=10;
posesBracket[0]=pi;
}
}

start
应该使用大写的
S
来编写,但这与您得到的错误不太匹配。而且
struct
可能不是方法的有效返回类型。它不应该是
posesBracket[0]。start=10;
(大写字母在start中)?哦,抱歉。这是输入错误,但这不是重点。根本问题是您有一个可变值类型。要么将可变类型设置为类类型,要么将值类型设置为不可变。您试图将可变值类型视为引用类型,并发现按值复制值类型的困难方式,而不是按值复制值类型引用。这就是它们被称为“值类型”的原因。不。它不起作用。temp是一种值类型。temp不是posesBracket[0]的指针。而且…我犯了错误的地方?不。它不起作用。temp是一种值类型。temp不是posesBracket[0]的指针。我看到了。posesBracket[0]=pi;。谢谢。这是因为您的帮助才解决的。谢谢。但它很混乱。所以我将声明短语信息的初始值设定项。
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;
        }
    }