사전 (C # 또는 기타)은 단순히 키를 기준으로 값을 찾는 컨테이너입니다. 많은 언어에서 가장 일반적으로 HashMap을 구현하는 Map으로 더 정확하게 식별됩니다.
고려해야 할 문제는 키가 없을 때 발생하는 문제입니다. 일부 언어는 반환 null
하거나 nil
다른 동등한 값으로 작동 합니다. 값이 존재하지 않음을 알리지 않고 값을 자동으로 기본값으로 설정합니다.
더 나은지 나쁜지에 대해 C # 라이브러리 디자이너는이 동작을 처리하는 관용구를 생각해 냈습니다. 존재하지 않는 값을 찾는 기본 동작은 예외를 발생시키는 것이라고 추론했습니다. 예외를 피하려면 Try
변형을 사용할 수 있습니다 . 문자열을 정수 또는 날짜 / 시간 객체로 구문 분석하는 데 사용하는 것과 동일한 접근 방식입니다. 기본적으로 그 영향은 다음과 같습니다.
T count = int.Parse("12T45"); // throws exception
if (int.TryParse("12T45", out count))
{
// Does not throw exception
}
그리고 그것은 인덱서가 다음을 위임하는 사전으로 넘어갔습니다 Get(index)
.
var myvalue = dict["12345"]; // throws exception
myvalue = dict.Get("12345"); // throws exception
if (dict.TryGet("12345", out myvalue))
{
// Does not throw exception
}
이것은 단순히 언어가 설계된 방식입니다.
해야 out
변수는 낙담?
C #은 처음 사용하는 언어가 아니며 특정 상황에서 목적이 있습니다. 동시성이 높은 시스템을 구축하려는 경우 out
동시성 경계에서 변수를 사용할 수 없습니다 .
여러 가지면에서 언어 및 핵심 라이브러리 제공 업체가지지하는 관용구가있는 경우 API에서이 관용구를 채택하려고합니다. 그러면 API가 더 일관성 있고 집에서 해당 언어로 느껴집니다. 따라서 Ruby로 작성된 메소드는 C #, C 또는 Python으로 작성된 메소드처럼 보이지 않습니다. 각각 코드를 작성하고 API 사용자가 더 빨리 학습하는 데 도움이되는 작업 방식을 선호합니다.
일반적으로지도는 안티 패턴입니까?
그들은 그들의 목적을 가지고 있지만, 여러 번 당신이 가진 목적에 대한 잘못된 해결책 일 수 있습니다. 특히 양방향 매핑이 필요한 경우 필요합니다. 많은 컨테이너와 데이터 구성 방법이 있습니다. 사용할 수있는 많은 접근 방법이 있으며 때로는 해당 컨테이너를 선택하기 전에 약간 생각해야합니다.
양방향 맵핑 값의 목록이 매우 짧은 경우 튜플 목록 만 필요할 수 있습니다. 또는 구조체의 목록에서 매핑의 양쪽에서 첫 번째 일치 항목을 쉽게 찾을 수 있습니다.
문제 영역을 생각하고 작업에 가장 적합한 도구를 선택하십시오. 없는 경우 만듭니다.