의 배열에 접근 :구문 때 다음으로 문자열
string[] strArr = {
"SOMETHING",
"ELSE",
"HERE"
};
var a = strArr['B' - 'A'];
정확히 ['B' - 'A']
로 진행되고, 어디 내가이 문제의 문서를 찾을 수 있습니다 무엇입니까?
의 배열에 접근 :구문 때 다음으로 문자열
string[] strArr = {
"SOMETHING",
"ELSE",
"HERE"
};
var a = strArr['B' - 'A'];
정확히 ['B' - 'A']
로 진행되고, 어디 내가이 문제의 문서를 찾을 수 있습니다 무엇입니까?
이는 문자 코드를 정수로 암묵적으로 변환합니다. B가 66이고 A가 65 인 숫자 1을 나타내는 것은 끔찍한 방법입니다.
결국 [1] 요소 ("ELSE")를 얻게됩니다.
이 숯불이 IConvertible
인터페이스를 구현하므로 작동 및 implicit conversion from char
to int
있다 char.csreference source
의지지 방법이
/// <internalonly/>
int IConvertible.ToInt32(IFormatProvider provider) {
return Convert.ToInt32(m_value);
}
더 갖는다. char에서 int로 변환하면 해당 문자의 UTF-16 코드가 제공됩니다. B
(ASCII 66)은 UTF-16에서 A
(ASCII 65) 다음의 다음 글자이므로 B
- A
은 1
이 될 42-41
과 같습니다.
strArr['B' - 'A']
는 C#으로
strArr[1]
동등하다 int로하지 (그러나 반대 생략) 문자로부터 암시 적 변환이 존재한다. 따라서 int x = 'a';
이 컴파일됩니다. 실제로 컴파일러는 코드를 다른 것으로 변환합니다. 다음은 원래 코드, 컴파일러에 의해 생성 된 코드 :
사용자 코드 :
string[] strArr = { "SOMETHING", "ELSE", "HERE" };
char left = 'B';
char right = 'A';
int index = left - right;
var a = strArr[index];
생성 된 컴파일러 코드 :
string[] strArr = { "SOMETHING", "ELSE", "HERE" };
char c = 'B';
char c2 = 'A';
int num = (int)c - c2; // 66 - 65
string text = array[num];
나는이 일주일에 이동에 대해 자세한 사항을
answer을 썼다. 확인 해봐.
설명서에 대해서는 char (C# Reference)을 사용해보십시오. 16 비트 숫자로 저장된 캐릭터 리터럴
먼저 'B'
및 'A'
는 값 1
와 char
로 해석된다.
둘째, 컴파일러는 식 'B' - 'A'
char
타입의 것을 인식하지만 string[]
형 int
의 인수를 인덱서있다. 위의 문서에서 언급했듯이 char
유형은 암시 적으로 int
으로 변환 될 수 있습니다. 그래서 이것은 컴파일러가 선택하는 것입니다.
[암시 적 변환] (https://msdn.microsoft.com/en-us/library/z5z9kes2.aspx)에 대한 자세한 내용을 볼 수도 있습니다. –
왜 downvotes? 나는 코드를 만들지 않았고, 나는 다른 누군가의 엉망을 파악하려고 시도하고있다. –
나는 방금 upvoted. 사람들이 당신이 모르는 것을 알아야한다고 생각하기 때문에 투표를 할 때 참을 수 없습니다. 투표를하지 않을 이유가 없습니다. 그리고 아무도 모든 것을 알지 못합니다. –
그리고 "이 코드가 작동하지 않는 이유는 무엇입니까?"에 가까운 투표가 있습니다 ... 분명히 당신의 질문이 아니 었습니다.업데이트 : 이제 끝났습니다. –