C# 访问字符串数组时的语法
以下是:C# 访问字符串数组时的语法,c#,C#,以下是: string[] strArr = { "SOMETHING", "ELSE", "HERE" }; var a = strArr['B' - 'A']; ['B'-'A']到底是怎么回事,我在哪里可以找到这种行为的文档?,它隐式地将字符代码转换为整数。表示数字1的方式很糟糕,因为B是66,a是65 最终结果是得到[1]元素(“ELSE”) 这是因为char实现了IConvertible接口,并具有此支持方法 /// <internalonly/>
string[] strArr = {
"SOMETHING",
"ELSE",
"HERE"
};
var a = strArr['B' - 'A'];
['B'-'A']
到底是怎么回事,我在哪里可以找到这种行为的文档?,它隐式地将字符代码转换为整数。表示数字1的方式很糟糕,因为B是66,a是65
最终结果是得到[1]元素(“ELSE”)
这是因为char实现了IConvertible
接口,并具有此支持方法
/// <internalonly/>
int IConvertible.ToInt32(IFormatProvider provider) {
return Convert.ToInt32(m_value);
}
//
int IConvertible.ToInt32(IFormatProvider){
返回Convert.ToInt32(m_值);
}
有关将字符代码隐式转换为整数的详细信息,请参阅。表示数字1的方式很糟糕,因为B是66,a是65 最终结果是得到[1]元素(“ELSE”) 这是因为char实现了
IConvertible
接口,并具有此支持方法
/// <internalonly/>
int IConvertible.ToInt32(IFormatProvider provider) {
return Convert.ToInt32(m_value);
}
//
int IConvertible.ToInt32(IFormatProvider){
返回Convert.ToInt32(m_值);
}
有关详细信息,请参见。从char到int的转换将为您提供该字符的UTF-16代码。由于UTF-16中B
(ASCII 66)是A
(ASCII 65)之后的下一个字母,B
-A
将等于42-41
,即1
所以
相当于
strArr[1]
有一个问题。从char到int的转换将为您提供该字符的UTF-16代码。由于UTF-16中B
(ASCII 66)是A
(ASCII 65)之后的下一个字母,B
-A
将等于42-41
,即1
所以
相当于
strArr[1]
在C#中,存在从char not int(但不是相反)的隐式转换。所以intx='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];
我写了一个关于这一周的细节。检查一下。在C#中,有一个来自char not int的隐式转换(但不是相反)。所以intx='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];
我写了一个关于这一周的细节。查看它。至于文档,请尝试
首先,'B'
和'A'
是存储为16位数字的字符文字,它们将解析为值为1
的字符
其次,编译器识别出表达式'B'-'A'
的类型为char
,但是string[]
有一个索引器,该索引器的参数类型为int
。如上文档所述,char
类型可以隐式转换为int
;这就是编译器的选择。至于文档,请尝试
首先,'B'
和'A'
是存储为16位数字的字符文字,它们将解析为值为1
的字符
其次,编译器识别出表达式'B'-'A'
的类型为char
,但是string[]
有一个索引器,该索引器的参数类型为int
。如上文档所述,char
类型可以隐式转换为int
;这就是编译器所做的选择。为什么要投反对票?我没有写代码,我只是想找出别人的错误。我只是投了更高的票。当人们投票反对时,我不能站起来,因为他们认为你应该知道一些你不知道的事情。这不是否决投票的理由。没有人知道一切,而你刚刚获得了“为什么这个代码不起作用”的接近票数…这显然不是你的问题。更新:它现在不见了:)为什么投反对票?我没有写代码,我只是想找出别人的错误。我只是投了更高的票。当人们投票反对时,我不能站起来,因为他们认为你应该知道一些你不知道的事情。这不是否决投票的理由。没有人知道一切,而你刚刚获得了“为什么这个代码不起作用”的接近票数…这显然不是你的问题。更新:它现在不见了:)您还可以阅读更多关于。您还可以阅读更多关于。