Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问字符串数组时的语法_C# - Fatal编程技术网

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
;这就是编译器所做的选择。

为什么要投反对票?我没有写代码,我只是想找出别人的错误。我只是投了更高的票。当人们投票反对时,我不能站起来,因为他们认为你应该知道一些你不知道的事情。这不是否决投票的理由。没有人知道一切,而你刚刚获得了“为什么这个代码不起作用”的接近票数…这显然不是你的问题。更新:它现在不见了:)为什么投反对票?我没有写代码,我只是想找出别人的错误。我只是投了更高的票。当人们投票反对时,我不能站起来,因为他们认为你应该知道一些你不知道的事情。这不是否决投票的理由。没有人知道一切,而你刚刚获得了“为什么这个代码不起作用”的接近票数…这显然不是你的问题。更新:它现在不见了:)您还可以阅读更多关于。您还可以阅读更多关于。