정적 클래스 내에서 사전 선언
정적 클래스 내에서 정적 사전 객체를 선언하는 방법은 무엇입니까? 나는 시도했다
public static class ErrorCode
{
public const IDictionary<string, string> ErrorCodeDic = new Dictionary<string, string>()
{
{ "1", "User name or password problem" }
};
}
그러나 컴파일러는 " 문자열이 아닌 참조 유형의 const 필드는 null로만 초기화 될 수 있습니다 "라고 불평합니다 .
사전을 한 번 선언하고 변경하지 않으려면 읽기 전용으로 선언하십시오.
private static readonly Dictionary<string, string> ErrorCodes
= new Dictionary<string, string>
{
{ "1", "Error One" },
{ "2", "Error Two" }
};
딕셔너리 항목이 읽기 전용이되도록하려면 (참조뿐만 아니라 컬렉션의 항목도) IDictionary를 구현하는 읽기 전용 딕셔너리 클래스를 만들어야합니다.
참조를 위해 ReadOnlyCollection을 확인하십시오.
BTW const는 스칼라 값을 인라인으로 선언 할 때만 사용할 수 있습니다.
올바른 구문 (VS 2008 SP1에서 테스트 됨)은 다음과 같습니다.
public static class ErrorCode
{
public static IDictionary<string, string> ErrorCodeDic;
static ErrorCode()
{
ErrorCodeDic = new Dictionary<string, string>()
{ {"1", "User name or password problem"} };
}
}
오래된 질문이지만 유용하다는 것을 알았습니다. 결과적으로 키와 값 모두에 문자열을 사용하는 사전에 대한 특수 클래스도 있습니다.
private static readonly StringDictionary SegmentSyntaxErrorCodes = new StringDictionary
{
{ "1", "Unrecognized segment ID" },
{ "2", "Unexpected segment" }
};
편집 : 아래 Chris의 의견에 따라 Dictionary<string, string>
over를 사용 하는 StringDictionary
것이 일반적으로 선호되지만 상황에 따라 다릅니다. 이전 코드 기반을 다루는 경우 StringDictionary
. 또한 다음 행에 유의하십시오.
myDict["foo"]
경우는 null을 반환합니다 myDict
A는 StringDictionary
하지만, 예외가 경우에 발생합니다 Dictionary<string, string>
. 자세한 내용은 그가 언급 한 SO 게시물을 참조하십시오 .
초기 예에 대한 문제는의 사용에 주로 기인 const
하기보다는 static
; C #에서는 null이 아닌 const 참조를 만들 수 없습니다.
나는 이것이 또한 효과가 있었을 것이라고 믿는다.
public static class ErrorCode
{
public static IDictionary<string, string> ErrorCodeDic
= new Dictionary<string, string>()
{ {"1", "User name or password problem"} };
}
또한 Y Low가 지적했듯이 추가 readonly
하는 것도 좋은 생각이며 여기에 설명 된 수정 자 중 어느 것도 사전 자체가 수정되는 것을 막을 수 없습니다.
사전에 값을 추가하는 정적 생성자를 만듭니다.
enum Commands
{
StudentDetail
}
public static class Quires
{
public static Dictionary<Commands, String> quire
= new Dictionary<Commands, String>();
static Quires()
{
quire.add(Commands.StudentDetail,@"SELECT * FROM student_b");
}
}
사전을 정적으로 만들고 정적 개체의 액터 외부에 추가하지 마십시오. C #에서 정적 / 상수 규칙을 조작하는 것보다 더 간단한 솔루션 인 것 같습니다.
좋아-그래서 나는 ASP 2.x에서 일하고 있습니다 (내 선택이 아닙니다 ...하지만 헤이 누가 괴롭습니까?).
초기화 사전 예제는 작동하지 않습니다. 그런 다음 이것을 발견했습니다 : http://kozmic.pl/archive/2008/03/13/framework-tips-viii-initializing-dictionaries-and-collections.aspx
... ASP 2.x에서 컬렉션 초기화를 사용할 수 없다는 사실을 알게되었습니다.
정적 / 클래스 생성자를 사용하여 사전을 초기화 할 수 있습니다.
public static class ErrorCode
{
public const IDictionary<string, string> ErrorCodeDic;
public static ErrorCode()
{
ErrorCodeDic = new Dictionary<string, string>()
{ {"1", "User name or password problem"} };
}
}
public static class ErrorCode
{
public const IDictionary<string , string > m_ErrorCodeDic;
public static ErrorCode()
{
m_ErrorCodeDic = new Dictionary<string, string>()
{ {"1","User name or password problem"} };
}
}
Probably initialise in the constructor.
참고URL : https://stackoverflow.com/questions/313324/declare-a-dictionary-inside-a-static-class
'developer tip' 카테고리의 다른 글
Python if-else 속기 (0) | 2020.09.13 |
---|---|
Bootstrap 3.0 : 같은 줄에 텍스트와 입력을 사용하는 방법은 무엇입니까? (0) | 2020.09.13 |
Div 오버레이를 전체 페이지 (뷰포트뿐만 아니라)로 만드시겠습니까? (0) | 2020.09.13 |
로거 래퍼 모범 사례 (0) | 2020.09.13 |
컴퓨터가 죽은 후 Git 저장소가 손상됨 (0) | 2020.09.13 |