내 구조체 클래스 :구조체의 값을 어떻게 수정할 수 있습니까?
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;
}
}
}
문제는 내가 pollyID에 pin.key.radiusID
을 설정하려고하면, 내가
말하는 오류가 있다는 것입니다 변수가 아니기 때문에 'System.Collections.Generic.KeyValuePair.Key'의 반환 값을 수정할 수 없습니다.
아이디어가 있으십니까?
구조와 수업의 차이점을 알고 있습니까? 클래스로 변경하면 코드가 컴파일되지만 구조체를 사용하는 경우의 의미와 다릅니다.어떤 상황에서는 구조체와 같은 의미 체계가 필요합니다 (이 경우에는 내가 제안한 접근 방식을 사용해야합니다). 반면 다른 것들은 클래스 의미 체계가 필요합니다. 'PinAndRadius' 타입의 변수가 콜렉션에 저장되고, 변수의'RadiusId'가 연속적으로 변경되면, 콜렉션에있는'RadiusId'도 역시 바꿀까요? 그렇게하면 변경 가능한 클래스가 적합합니다. 그렇지 않으면 ... – supercat
... 변경 가능한 클래스는 잘못된 참조입니다 (인스턴스에 대한 하나의 참조를 통해 액세스 한 속성을 변경하면 해당 인스턴스에 대한 모든 참조에서 보이는 속성이 변경되므로). 비교적 적은 수의 예외를 제외하고, 각 변경 가능한 객체 인스턴스는 주어진 시간에 정확하게 하나의 소유자를 가져야하며 변경 가능한 객체에 대한 참조를 보유하는 모든 코드는 해당 객체를 소유하고 있는지 여부를 알아야합니다. 누가 소유하고 있는지 추적 할 수있는 공식적인 메커니즘은 없지만 무차별 객체 참조를 소유하고있는 사람을 알지 못하는 사이에이를 통과시키는 것은 버그의 처방입니다. – supercat
이 경우, 콜렉션은 자주 변경 될 것입니다. 따라서 내가 변경 가능한 클래스를 사용했는지, 왜 C#에서 매우 새로운 것이 었는지, 그래서 당신이 제공 한 설명에 대해 매우 유용합니다. –