C# 如何修改列表中的值<;t>;? class-SomeClass { 私有结构短语信息 { 公共int启动; 公共整数长度; } ... 私有方法(…) { List posesBracket=新列表(); 添加(新短语信息()); posesBracket[0].Start=10; }
当然,posesBracket[0]。start=10;出现编译器错误CS1612:“无法修改“expression”的返回值,因为它不是变量”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;
如何修改列表中的值?问题在于,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;
}
}