C#如何将字符和字符数组赋值给字符串?

14
        char character = 'c';
        string str = null;
        str = character.ToString();//this is ok

        char[] arrayChar = { 'a', 'b', 'c', 'd' };
        string str2 = null;
        str2 = string.Copy(arrayChar.ToString());//this is not ok
        str2 = arrayChar.ToString();//this is not ok.

我正在尝试将char数组转换为字符串,但是最后两次尝试都失败了。我找到了其他的来源,他们必须创建新的字符串类型,但我不知道为什么。有人能给我提供一些解释吗?谢谢。

3个回答

29

您需要构造一个新的字符串。

调用arrayChar.ToString()会调用char[]类型的“ToString”方法,该方法未重载以将字符构建为字符串,而是构建指定该类型是字符数组的字符串。这不会给您所需的行为。

然而,通过str2 = new string(arrayChar);构造一个新字符串将会给您所需的行为。

问题在于,在C#中(与C ++不同),字符串不同于字符数组。尽管它们可以表示相同的数据,但这是两个截然不同的类型。字符串可以枚举为字符(String实现了IEnumerable<Char>),但在CLR看来,它并不是字符类型。执行转换需要编写代码来在两者之间进行转换 - 而字符串构造函数提供了此机制。


实际上,在C++中,“字符串”不是“字符数组”。请更加精确。在C++中,“字符串”是一个类(std::string、std::wstring),它恰好具有从字符数组进行隐式转换的构造函数,这与“成为char数组”迥然不同。或者,如果你一直在谈论“c字符串”,那么它就是作为以空字符结尾的字符数组编码的C语言概念。C语言和C++不同。除此之外,一切都好。 - quetzalcoatl

9
new string(arrayChar);

这难道不是你想做的吗? - Matti Virkkunen
1
@Bopha:我在我的答案中尝试为您解释了这一点 - 这有帮助吗?@Andrey:+1,因为这是正确的答案 :) - Reed Copsey
是的,那就是我想做的,但我想知道为什么我必须创建新字符串来将数组字符设置为字符串。因为我认为字符串只是表示像数组一样的字符序列。这是因为我可以通过应用括号和索引位置来访问字符串中的单个字符。 - Bopha
@Bopha - 因为 char[] 是可变的,而 string 不是。这是 .net 中字符串设计和实现的方式。 - Andrey
@Bopha - 你可以使用 [] 来处理相同的字符串结果。 - Andrey
1
@Bopha:在.NET中,字符串是不可变的,这意味着您无法“设置”任何现有字符串。唯一的方法是创建一个新的字符串。 - Matti Virkkunen


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接