C#将char和char数组分配给字符串?
Posted
技术标签:
【中文标题】C#将char和char数组分配给字符串?【英文标题】:C# assign char and char array to string? 【发布时间】:2011-02-07 02:58:32 【问题描述】: 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 数组转换为字符串,但最后两次尝试不起作用。我找到的其他来源,他们必须创建新的字符串类型,但我不知道为什么。谁能给我一点解释,谢谢。
【问题讨论】:
【参考方案1】:你需要构造一个新的字符串。
执行arrayChar.ToString()
会为char[]
类型调用“ToString”方法,该方法不会重载以从字符构造字符串,而是构造一个指定类型为字符数组的字符串。这不会给你你想要的行为。
然而,通过str2 = new string(arrayChar);
构造一个新字符串,将会得到你想要的行为。
问题在于,在 C# 中(与 C++ 不同),字符串与字符数组不同。这是两种截然不同的类型(即使它们可以表示相同的数据)。字符串可以枚举为字符(String 实现 IEnumerable<Char>
),但就 CLR 而言,它与字符的类型不同。进行转换需要代码在两者之间进行转换——字符串构造函数提供了这种机制。
【讨论】:
实际上,在 C++ 中,“字符串”不是“字符数组”。请准确一点。在 C++ 中,“字符串”是一个类 (std::string, std::wstring),它恰好有一个来自字符数组的隐式转换构造函数。这与“作为一个字符数组”有很大不同。或者,如果您一直在谈论c-string
,那么这就是将字符串编码为空终止字符数组的 C 语言概念。 C. 不是 C++。不同的语言。除此之外,一切都很好。【参考方案2】:
new string(arrayChar);
【讨论】:
这不是你想做的吗? @Bopha:我试图在我的回答中为您解释这一点 - 这有帮助吗? @Andrey:+1 也是正确答案 :) 是的,这就是我想要做的,但想知道为什么我必须创建新字符串来将数组 char 设置为字符串。因为我认为字符串只是一个代表数组的字符序列。原因是我可以通过应用括号和索引位置来访问字符串中的单个字符。 @Bopha - 因为 char[] 是可变的,而 string 不是。这就是在 .net 中设计和实现字符串的方式 @Bopha:在 .NET 中,字符串是不可变的,这意味着您不能为现有字符串“设置”任何内容。唯一的方法是创建一个新字符串。【参考方案3】:有一个string constructorthat takes a char array。
【讨论】:
以上是关于C#将char和char数组分配给字符串?的主要内容,如果未能解决你的问题,请参考以下文章