【问题标题】:C# assign char and char array to string?C#将char和char数组分配给字符串?
【发布时间】: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 数组转换为字符串,但最后两次尝试不起作用。我找到的其他来源,他们必须创建新的字符串类型,但我不知道为什么。谁能给我一点解释,谢谢。

【问题讨论】:

    标签: c# string arrays 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】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-03
      • 2015-06-25
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 2012-10-16
      • 2015-04-25
      • 1970-01-01
      相关资源
      最近更新 更多