我的结构类:如何修改结构中的值?
public struct PinAndRadius
{
public string pinID { get; set; }
public string radiusID { get; set; }
public string getPinID()
{
return pinID;
}
public string getRadiusID()
{
return radiusID;
}
}
一个问题的方法:
void mapArea_VE_PinDragged(double latitude, double longitude, object id)
{
foreach (var pin in pinRadiusCollection)
{
string ID = id.ToString();
//string newID = ID.Substring(0, 18);
if (!pin.Key.pinID.Equals(ID))
{
continue;
}
else if (pin.Key.pinID.Equals(ID))
{
var newLoc = createNewSearchLocation(latitude, longitude);
mapArea.VE_DeleteRadius(pin.Key.radiusID);
drawPoly(newLoc, pin.Value.xar_Radius);
pin.Key.radiusID = pollyID;
break;
}
}
}
的问题是,当我尝试设置pin.key.radiusID
到pollyID,我得到一个错误说
无法修改'System.Collections.Generic.KeyValuePair.Key'的返回值,因为它不是一个变量...
有什么建议吗?
你是否理解结构和类之间的差异?更改为类将使代码编译,但语义与使用结构时的语义不同。有些情况需要类似结构的语义(在这种情况下,应该使用我提出的方法),而其他情况则需要类语义。如果一个'PinAndRadius'类型的变量被存储在一个集合中,然后这个变量的'RadiusId'随后被改变,你是否想要集合中的''RadiusId'也改变?如果你这样做,一个可变类将是适当的。如果没有... – supercat
...那么可变类是错误的使用(因为通过改变一个实例访问的属性将改变所有对该实例的引用所看到的属性)。由于例外情况相对较少,每个可变对象实例在任何给定时间都必须只有一个所有者,并且任何持有对可变对象的引用的代码都需要知道它是否拥有所讨论的对象。没有正式的机制来跟踪谁拥有什么,但是在不知道谁拥有它们的情况下传递混杂的对象引用是错误的秘诀。 – supercat
在这种情况下,集合应该会经常更改,因为我将删除它,因此为什么我使用了一个可变类,即时通讯相当新的C#所以我非常感谢您提供的解释非常有帮助 –