지역 변수 C #으로 내부 구조를 초기화 할 수 없습니다.

레흐 마이 트레이드

솔직히 인터넷 검색을 시도했지만 할 수 없었습니다. 좋아, 다음과 같은 구조가 있습니다.

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 structget-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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C : void * 유형의 rvalue로 변수를 초기화 할 수 없습니다.

분류에서Dev

C : 왜 중괄호가있는 배열 내부의 구조체를 초기화 할 수 없습니까?

분류에서Dev

C ++ : IIFE 스레드로부터 안전한 정적 지역 변수를 초기화하고 있습니까?

분류에서Dev

전역 개체를 초기화 할 수 없습니다.

분류에서Dev

PHP 왜 정적 변수를 time ()으로 초기화 할 수 없습니까?

분류에서Dev

var 크기가 클래스 외부에 있지 않으면 클래스 내에서 배열을 동적으로 초기화 할 수 없습니다.

분류에서Dev

지정된 이니셜 라이저가 C99에서 초기화하는 변수를 합법적으로 참조 할 수 있습니까?

분류에서Dev

클로저 내부에서 지역 변수 초기화

분류에서Dev

JSon을 C #으로 역 직렬화 할 수 없습니다.

분류에서Dev

std :: 함수를 암시 적으로 초기화 할 수 없습니다.

분류에서Dev

C #의 PortableDeviceManagerClass를 초기화 할 수 없습니다.

분류에서Dev

c에서 배열을 초기화 할 수 없습니다. | 경고 : long에서 부호없는 long으로 변환

분류에서Dev

내 DRF 직렬 변환기를 수동으로 사용할 수 없습니다.

분류에서Dev

c ++ float 유형의 변수를 double로 초기화 할 수 있습니까?

분류에서Dev

범위가 지정된 열거 : 오류 : 초기화에서 'int'를 'Handle'로 변환 할 수 없습니다.

분류에서Dev

전역 변수를 다시 초기화하여 C의 값을 재정의 할 수 있습니까?

분류에서Dev

Google지도에서 Swift를 초기화 할 수 없습니다.

분류에서Dev

빈 마지막 필드를 초기화 할 수 없습니다.

분류에서Dev

JQuery로 Masonry를 초기화 할 수 없습니다.

분류에서Dev

초기화에서 float float를 float로 변환 할 수 없습니다.

분류에서Dev

네이티브 : language = eng으로 Tesseract API를 초기화 할 수 없습니다.

분류에서Dev

Fabric으로 Twitter와 Crashlytics를 모두 초기화 할 수 없습니다.

분류에서Dev

부분적으로 변수를 전달할 수 없습니다.

분류에서Dev

초기화되지 않은 변수, Void 메서드는 값을 반환 할 수 없으며 변수로 확인할 수 없습니다.

분류에서Dev

자바 스크립트 기반 게임에서 전역 변수를 초기화 할 수 없습니다.

분류에서Dev

StringBuilder가 내 초기 변수를 역으로 변경합니까?

분류에서Dev

DIV 내부의 텍스트를 변경 한 후 jquery로 DIV의 크기를 조정할 수 없습니다.

분류에서Dev

정적 변수를 다른 변수의 값으로 초기화 할 수없는 이유는 무엇입니까?

분류에서Dev

내 C 프로그램이 곱셈 기호를 감지 할 수 없습니다.

Related 관련 기사

  1. 1

    C : void * 유형의 rvalue로 변수를 초기화 할 수 없습니다.

  2. 2

    C : 왜 중괄호가있는 배열 내부의 구조체를 초기화 할 수 없습니까?

  3. 3

    C ++ : IIFE 스레드로부터 안전한 정적 지역 변수를 초기화하고 있습니까?

  4. 4

    전역 개체를 초기화 할 수 없습니다.

  5. 5

    PHP 왜 정적 변수를 time ()으로 초기화 할 수 없습니까?

  6. 6

    var 크기가 클래스 외부에 있지 않으면 클래스 내에서 배열을 동적으로 초기화 할 수 없습니다.

  7. 7

    지정된 이니셜 라이저가 C99에서 초기화하는 변수를 합법적으로 참조 할 수 있습니까?

  8. 8

    클로저 내부에서 지역 변수 초기화

  9. 9

    JSon을 C #으로 역 직렬화 할 수 없습니다.

  10. 10

    std :: 함수를 암시 적으로 초기화 할 수 없습니다.

  11. 11

    C #의 PortableDeviceManagerClass를 초기화 할 수 없습니다.

  12. 12

    c에서 배열을 초기화 할 수 없습니다. | 경고 : long에서 부호없는 long으로 변환

  13. 13

    내 DRF 직렬 변환기를 수동으로 사용할 수 없습니다.

  14. 14

    c ++ float 유형의 변수를 double로 초기화 할 수 있습니까?

  15. 15

    범위가 지정된 열거 : 오류 : 초기화에서 'int'를 'Handle'로 변환 할 수 없습니다.

  16. 16

    전역 변수를 다시 초기화하여 C의 값을 재정의 할 수 있습니까?

  17. 17

    Google지도에서 Swift를 초기화 할 수 없습니다.

  18. 18

    빈 마지막 필드를 초기화 할 수 없습니다.

  19. 19

    JQuery로 Masonry를 초기화 할 수 없습니다.

  20. 20

    초기화에서 float float를 float로 변환 할 수 없습니다.

  21. 21

    네이티브 : language = eng으로 Tesseract API를 초기화 할 수 없습니다.

  22. 22

    Fabric으로 Twitter와 Crashlytics를 모두 초기화 할 수 없습니다.

  23. 23

    부분적으로 변수를 전달할 수 없습니다.

  24. 24

    초기화되지 않은 변수, Void 메서드는 값을 반환 할 수 없으며 변수로 확인할 수 없습니다.

  25. 25

    자바 스크립트 기반 게임에서 전역 변수를 초기화 할 수 없습니다.

  26. 26

    StringBuilder가 내 초기 변수를 역으로 변경합니까?

  27. 27

    DIV 내부의 텍스트를 변경 한 후 jquery로 DIV의 크기를 조정할 수 없습니다.

  28. 28

    정적 변수를 다른 변수의 값으로 초기화 할 수없는 이유는 무엇입니까?

  29. 29

    내 C 프로그램이 곱셈 기호를 감지 할 수 없습니다.

뜨겁다태그

보관