为什么我会得到一个“;无法隐式转换类型';字符[]和#x27;至';字符串';[C#programs]”;
。。。当我在C#中尝试这个时: 但当我尝试这一点时,情况并非如此:为什么我会得到一个“;无法隐式转换类型';字符[]和#x27;至';字符串';[C#programs]”;,c#,string,linq,type-conversion,C#,String,Linq,Type Conversion,。。。当我在C#中尝试这个时: 但当我尝试这一点时,情况并非如此: string reversedName = new string (name.ToCharArray().Reverse().ToArray()); ??当我尝试将一个To.String()链接添加到第一个方法的末尾时,运行时不会引发异常,而是返回:System.Char[] 我正在寻找一种解释,解释为什么编译器似乎无法将char[]隐式转换为string: *除非调用新字符串, *即使我们将ToString()函数链接到此处
string reversedName = new string (name.ToCharArray().Reverse().ToArray());
??当我尝试将一个To.String()链接添加到第一个方法的末尾时,运行时不会引发异常,而是返回:System.Char[]
我正在寻找一种解释,解释为什么编译器似乎无法将char[]隐式转换为string:
*除非调用新字符串
,
*即使我们将ToString()
函数链接到此处的末尾。如果您尝试
string reversedName = new string (name.ToCharArray().Reverse().ToArray());
您正在使用其构造函数创建字符串。如您所见,第一个参数是字符数组:
但是这里
reversedName = name.ToCharArray().Reverse().ToArray();
您正在返回一个数组
(末尾带有.ToArray()),该数组显然不能分配给字符串类型的变量
正如您已经注意到的那样,在array
上调用ToString()
将打印其类型System.Char[]
。Char数组对象上的ToString()将返回System.Char[]
,因为这是默认和预期的行为。编译器不能假定您希望将每个字符连接到一个字符串中,然后返回该字符串
正确的方法是使用新字符串(char[])
您也可以始终使用扩展类来添加扩展方法
public static class Extensions
{
public static string ConvertToString(this char[] array)
{
return new string(array);
}
}
用法:
string s = array.ConvertToString();
char[]
和string
是不同的类型。。。C#不是C/C++因为字符串不是C#中的字符数组。编译器似乎无法运行,因为它没有意义。保持你的语言直截了当。显然,第二个例子是构造函数。所以你知道为什么这是正确的吗?为什么C团队没有从char[]进行隐式运算符转换?可能是因为他们有一个构造函数,通常隐式对话不是你想要的。@aquinas好吧,这是一个很好的解释(对于C#noob),我的收获:构造函数和普通赋值的不同的可转换性标准,是的,有道理。我猜编译器假设我只想在(字符串)构造函数中使用每个字符时将其转换为单个字符串。对吗?对。实际上,使用字符串构造函数,编译器不需要假设——您是显式地告诉它这样做的,因为在这种情况下没有歧义
string s = array.ConvertToString();