솔직히 인터넷 검색을 시도했지만 할 수 없었습니다. 좋아, 다음과 같은 구조가 있습니다.
struct TestStruct
{ public int n;
public struct _InnerStruct { public int m; }
public _InnerStruct InnerStruct;
}
그리고 n 필드 의 일부 지역 변수에 값을 할당 할 수 있습니다 .
static void Main ()
{
int SomeLOCALvar = 1;
TestStruct TEST_STRUCT = new TestStruct () { n = SomeLOCALvar };
}
내 문제는 m 필드 와 똑같은 작업을 수행하는 방법을 이해하지 못한다는 것 입니다 . 이 컴파일과 같이 코딩하지 않는 이유 :
TestStruct TEST_STRUCT = new TestStruct () { n = SomeLOCALvar, .InnerStruct.m = SomeLOCALvar };
올바른 구문은 무엇입니까?
음, 다음이 작동합니다 .
TestStruct TEST_STRUCT = new TestStruct { n = SomeLOCALvar, InnerStruct = new _InnerStruct { m = SomeLOCALvar } };
그러나 솔직히 그렇게하는 것은 매우 나쁜 생각입니다. 값 유형 (구조체)은 거의 항상 불변이어야합니다. 이와 같은 공개 가변 필드가있는 구조체는 매우 취약하며 혼란과 코드 손상 을 유발합니다.
IMO, 이것들은 readonly struct
get-only 속성과 생성자와 함께 이어야합니다 . 예를 들면 :
readonly struct InnerStruct {
public int M { get; }
public InnerStruct(int m) => M = m;
}
readonly struct TestStruct
{
public int N { get; }
public InnerStruct InnerStruct { get; }
public TestStruct(int n, int m)
{
N = n;
InnerStruct = new InnerStruct(m);
}
}
(이상적으로는 권투를 방지하기 위해 Equals
, GetHashCode
및을 모두 재정의해야합니다 ToString
)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다