나는 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
- 답변 # 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
관련 자료
- php - Laravel, Public_html에 파일을 업로드하지 않고 대신 laravel 루트 프로젝트에 폴더 생성
- python - 사전 키에서 색인을 사용하여 Pandas 데이터 프레임 만들기
- 객체의 두 번째 인스턴스를 만들면 전체 클래스 동작 (C ++)이 변경됩니다
- python - 팬더 데이터 프레임에서 부모 자식 쌍의 사전 만들기
- ruby - 단어와 정의에 대한 CRUD 기능을 사용하여 각 단어에 대해 여러 정의가 포함 된 사전 만들기
- c# - 제네릭 형식 (클래스)의 더미 인스턴스 대신 "널"을 어떻게 반환합니까?
- amazon web services - 새 EC2 인스턴스를 생성 할 때 기존 키 페어를 사용할 수 있습니까?
- python - 사전을 만들기위한보다 우아한 코드를위한 팁
- react native - v2 NavigationshowModal 새 컴포넌트 인스턴스를 작성하지만 실제로 탐색하지는 않음
- java - 클래스의 인스턴스 변수에서 배열 만들기
- Python 사전에서 JSON 객체 만들기
- kotlin - 요청에 전역 구성 대신 FuelManager 인스턴스 사용
- Python 또는 reactjs에서 사전을 사용하여 텍스트, 값 쌍 만들기
- python - 길이가 다른 튜플 목록의 사전에서 Pandas DataFrame 만들기
- python - 값이있는 사전을 만들 때 값이 임의로 False에서 True로 변경됩니다
- Selenium을 사용하여 YouTube 검색에서 N 요소의 Python 사전 만들기
- python - 목록의 요소를 그룹화하여 중첩 된 사전 만들기
- C #은 Dictionary 및 Func를 사용하여 ctor 인수로 새 인스턴스를 만듭니다
- python - 클래스 인스턴스 생성 문제
- python - 변수 목록에서 부울 사전 만들기
Cell
struct
입니다 .struct
를 사용하지 않는 것이 좋습니다 수정할 수있는 개체 방금 이유를 찾은 것 같아요.와이즈 비즈
TryGetValue
를 반환 , 그것은struct
에 그것을 복사 다른value
인struct
에있는 것보다 .Dictionary
를 교체했다고 상상해보십시오 작성자struct
-또 다른 가치 유형-int
에 할당 할 것으로 예상됩니까?int
에서TryGetValue
를 변경하려면 입장Dictionary
?다른 제약 조건이 필요한 경우
int
를 사용하십시오struct
를 업데이트해야합니다. 와이즈 비즈 새로운cells
와 함께 다른 값 유형과 마찬가지로