>

나는 C #을 가진 멍청한 놈이며 같은 방법이 다른 방식으로 작동하는 이유를 알 수 없습니다. 간단한 스프레드 시트 응용 프로그램을 만들고 있는데 키가 문자열 이름이고 값이 Cell 개체 인 셀 사전을 사용하고 있습니다.

public struct Cell
{
    private string Name { get; }
    public Object Content { get; set; }
    public Cell(string n, Object o)
    {
        Name = n;
        Content = o;
    }
}

이제 셀 내용을 쉽게 추가/변경할 수 있어야하므로 이렇게했습니다 :

Dictionary<string, Cell> cells = new Dictionary<string, Cell>();
//  Assign new cell to 5.0 & print
cells.Add("a1", new Cell("a1", 5.0));
Console.WriteLine(cells["a1"].Content);     //  Writes 5
//  Assign cell to new content & print
cells.TryGetValue("a1", out Cell value);
value.Content = 10.0;
Console.WriteLine(cells["a1"].Content);     //  Writes 5
Console.ReadKey();

물론, 사전은새 셀을 생성하지만, GetGetValue를 사용하면 셀의 새 내용이 실제 객체로 가져 오지 않습니다. 두 번째 인쇄는 10이 될 것으로 예상했습니다. 디버그에서는 셀의 참조를 얻는 대신 새 셀을 인스턴스화하는 것처럼 보입니다.

이전에 Dictionary를 사용해 보았으며 기존 객체의 속성을 변경하기 위해 TryGetValue를 사용했습니다. 여기 두 가지 질문이 있습니다.이 경우에 내가 뭘 잘못하고 있으며 메소드가 참조를 반환하는지 여부를 결정하는 요인은 무엇입니까?

  • 답변 # 1

    Cell   struct 입니다 . struct 를 사용하지 않는 것이 좋습니다  수정할 수있는 개체 방금 이유를 찾은 것 같아요.

    와이즈 비즈   TryGetValue 를 반환 , 그것은 struct 에 그것을 복사 다른 value 인   struct 에있는 것보다 .

    Dictionary 를 교체했다고 상상해보십시오  작성자 struct  -또 다른 가치 유형- int 에 할당 할 것으로 예상됩니까?   int 에서   TryGetValue 를 변경하려면  입장 Dictionary ?

    다른 제약 조건이 필요한 경우 int 를 사용하십시오 struct 를 업데이트해야합니다.  와이즈 비즈  새로운 cells 와 함께 다른 값 유형과 마찬가지로

    Dictionary
    
    

  • 답변 # 2

    struct 를 만들어야합니다   Dictionary<string, Cell> cells = new Dictionary<string, Cell>(); // Assign new cell to 5.0 & print cells.Add("a1", new Cell("a1", 5.0)); Console.WriteLine(cells["a1"].Content); // Writes 5 // Assign cell to new content & print cells.TryGetValue("a1", out Cell value); value.Content = 10.0; cells["a1"] = value; // update cells Dictionary Console.WriteLine(cells["a1"].Content); // Writes 5 Console.ReadKey(); 로 .

    그것은 struct Cell 때문입니다  값 유형이며 내용은 참조로 변경할 수 없습니다. 자세히 알고 싶다면 여기에서 값과 참조 유형의 차이에 대해 읽을 수 있습니다.

    class Cell

관련 자료

  • 이전 c# - 도커 컨테이너 외부에 로그 파일 노출
  • 다음 AI Python - ai 파이썬 - typeerror : 'int'개체에 '__getitem__'특성이 없습니다