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数组分配给字符串?的主要内容,如果未能解决你的问题,请参考以下文章

将 unsigned char* 缓冲区分配给字符串

将 char 数组值从 C++ 传递到 C# 应用程序

将 c++ dll 的 char 指针数组传递给 c# 字符串

将一个数组分配给另一个数组c ++ [重复]

c# char[]数组和字符串之间互转

在C#中将Char数组转换为字符串[重复]