개체 주소 지정 / 액세스 문제 내의 C # 목록

홍옥

코드가 있습니다. 수업이 있습니다.

public class TestClass
{
    private string String1 = "";
    private List<string> Strings = new List<string>();

    public TestClass(string String1, List<string> Strings)
    {
        this.String1 = String1;
        this.Strings = Strings;
    } // end constructor.

    // Associated get/set methods.
} // end class.

그런 다음 (다른 클래스에서 이것을 사용하는 일부 코드) :

public TestMethod()
{
    List<string> Strings = new List<string>();
    List<TestClass> MasterList = new List<TestClass>();
    int Counter = 0;
    string Name = " ... " // <- updated every time.

    while(Condition1)
    {
        if(Condition2)
        {
            Strings.Add(Counter.ToString());
        }
        else
        {
            MasterList.Add(new TestClass(Name, Strings));
            Name = // ... <- name updated here.
            Strings.Clear(); // Clear array.
        } // end if.
    } // end while.
} // end method.

처음에는의 첫 번째 요소 MasterList가 "Name1"이고 목록에 "1, 2, 3"이 포함됩니다. 다음에 MasterList"Name2"및 "4, 5, 6"이 포함되지만 이제 첫 번째 요소에는 "1, 2, 3"이 아닌 "4, 5, 6"이 포함됩니다. 얼마 동안 실행하면 "Name1", "Name2"가 매번 업데이트되지만 모든 요소 목록은 정확히 동일한 내용입니다. 예를 들어 출력 내용은 무엇입니까?

"Name1" -> "1, 2, 3" "Name2" -> "4, 5, 6" "Name3" -> "7, 8, 9"

실제로 일어나는 일 :

"Name1" -> "7, 8, 9" "Name2" -> "7, 8, 9" "Name3" -> "7, 8, 9"

내가 여기서 뭘 잘못했는지 알아 내려고하는데, 어떤 아이디어라도? 이것은 일종의 참조 문제입니까?

감사! 홍옥

거스 만

항상 동일한 목록을 재사용하고 있습니다.

MasterList.Add(new TestClass(Name, Strings)); //<<- Strings is always the same instance

따라서 목록에서 변경 한 사항은 모든 하위 클래스에 전파되고 List는 참조 객체이므로 함수에 전달할 때 데이터 구조가 아니라 객체에 대한 참조를 전달하므로 모두 클래스는 동일한 객체를 가리 킵니다.

이를 해결하는 매우 간단한 방법은 다음을 대체하는 것입니다.

Strings.Clear(); // Clear array.

와:

Strings = new List<string>();

이런 식으로 매번 새 인스턴스에 대한 참조를 전달합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C # 액세스 사용자 지정 연결 목록 개체의 요소

분류에서Dev

목록의 액세스 요소 <목록 <목록 <리스트 <개체> >>> 제목 = 새로운 ArrayList를 <목록 <목록 <리스트 <개체> >>> ();

분류에서Dev

C ++ : 벡터 목록의 특정 요소에 액세스

분류에서Dev

C : 연결 목록의 내부 구조 주소 지정

분류에서Dev

c # foreach에서 int 및 string으로 구성된 개체 목록의 요소에 액세스하는 방법

분류에서Dev

C ++의 공용체 내부 구조 액세스 문제

분류에서Dev

HashMap 문제 내의 개체 목록

분류에서Dev

Haskell : 사용자 지정 목록 유형의 요소 액세스

분류에서Dev

사용자 지정 개체 목록을 사용하는 Parcelable 클래스의 문제 (내부 클래스에서 정의 됨)

분류에서Dev

개체 목록-개체의 매개 변수에 액세스

분류에서Dev

다른 자식 클래스의 개체를 지정된 주소에 할당 [C ++]

분류에서Dev

c의 중첩 된 구조체, 포인터 주소 지정 문제

분류에서Dev

개체 목록에있는 개체의 필드에 액세스

분류에서Dev

순환 연결 목록 C #, 개체 참조가 개체의 인스턴스로 설정되지 않음

분류에서Dev

지시문 내부의 개체 속성에 액세스 할 수 없습니다.

분류에서Dev

Python : 하위 목록 내의 개별 요소에 액세스 할 수 없습니다. 전체 하위 목록이 단일 요소로 표시됩니다.

분류에서Dev

C #에서 동적 개체의 요소에 액세스

분류에서Dev

주어진 인덱스의 요소별로 목록의 튜플 정렬 및 액세스

분류에서Dev

두 개의 특정 제목 요소 사이의 모든 li 요소에 액세스

분류에서Dev

C ++의 목록에서 요소 지우기 문제

분류에서Dev

부모 구성 요소의 개체 액세스 및 수정

분류에서Dev

목록을 기반으로 C # 사용자 지정 개체 컬렉션을 주문하는 방법

분류에서Dev

이미지 요소의 상위 개체 속성에 액세스

분류에서Dev

jquery를 사용하여 C # 개체 목록에 액세스

분류에서Dev

jquery를 사용하여 C # 개체 목록에 액세스

분류에서Dev

포인터 핸들에서 개체의 주소에 액세스

분류에서Dev

특정 목록 항목 액세스 문제

분류에서Dev

세션 개체 내의 배열 요소에 액세스

분류에서Dev

세션 개체 내의 배열 요소에 액세스

Related 관련 기사

  1. 1

    C # 액세스 사용자 지정 연결 목록 개체의 요소

  2. 2

    목록의 액세스 요소 <목록 <목록 <리스트 <개체> >>> 제목 = 새로운 ArrayList를 <목록 <목록 <리스트 <개체> >>> ();

  3. 3

    C ++ : 벡터 목록의 특정 요소에 액세스

  4. 4

    C : 연결 목록의 내부 구조 주소 지정

  5. 5

    c # foreach에서 int 및 string으로 구성된 개체 목록의 요소에 액세스하는 방법

  6. 6

    C ++의 공용체 내부 구조 액세스 문제

  7. 7

    HashMap 문제 내의 개체 목록

  8. 8

    Haskell : 사용자 지정 목록 유형의 요소 액세스

  9. 9

    사용자 지정 개체 목록을 사용하는 Parcelable 클래스의 문제 (내부 클래스에서 정의 됨)

  10. 10

    개체 목록-개체의 매개 변수에 액세스

  11. 11

    다른 자식 클래스의 개체를 지정된 주소에 할당 [C ++]

  12. 12

    c의 중첩 된 구조체, 포인터 주소 지정 문제

  13. 13

    개체 목록에있는 개체의 필드에 액세스

  14. 14

    순환 연결 목록 C #, 개체 참조가 개체의 인스턴스로 설정되지 않음

  15. 15

    지시문 내부의 개체 속성에 액세스 할 수 없습니다.

  16. 16

    Python : 하위 목록 내의 개별 요소에 액세스 할 수 없습니다. 전체 하위 목록이 단일 요소로 표시됩니다.

  17. 17

    C #에서 동적 개체의 요소에 액세스

  18. 18

    주어진 인덱스의 요소별로 목록의 튜플 정렬 및 액세스

  19. 19

    두 개의 특정 제목 요소 사이의 모든 li 요소에 액세스

  20. 20

    C ++의 목록에서 요소 지우기 문제

  21. 21

    부모 구성 요소의 개체 액세스 및 수정

  22. 22

    목록을 기반으로 C # 사용자 지정 개체 컬렉션을 주문하는 방법

  23. 23

    이미지 요소의 상위 개체 속성에 액세스

  24. 24

    jquery를 사용하여 C # 개체 목록에 액세스

  25. 25

    jquery를 사용하여 C # 개체 목록에 액세스

  26. 26

    포인터 핸들에서 개체의 주소에 액세스

  27. 27

    특정 목록 항목 액세스 문제

  28. 28

    세션 개체 내의 배열 요소에 액세스

  29. 29

    세션 개체 내의 배열 요소에 액세스

뜨겁다태그

보관