【问题标题】:Converting string to char array?将字符串转换为字符数组?
【发布时间】:2017-12-23 18:21:29
【问题描述】:

谁能解释一下为什么会这样?

class Program
{
    static char[] ch = new char[2];
    static string name = "Ivankata";

    static void Main(string[] args)
    {
        inputChar();
    }

    static void inputChar()
    {
        ch = name.ToCharArray();
        Console.WriteLine(ch);
    }
}

我的名为 ch 的 char 数组只接受 2 个字符,但是当我将字符串“Ivankata”转换为 char 数组时,它会以某种方式工作吗?它不应该削减剩余的“ankata”并只显示“iv”吗?谁能解释这里发生了什么?

【问题讨论】:

  • 您没有为现有数组赋值。您正在用一个新的替换它。
  • @Mahmoud 这不会更改现有数组。它取代了它。改变的是 ch 变量引用的内容。
  • 我把“以前分配的数组”和“现有的”一样。
  • “字符数组就像一盒巧克力。你永远不知道会得到什么。” - 阿甘正传
  • 请阅读How to Ask 并选择tour - 您的 6 个问题有 8 个答案,但没有一个被接受。单击您获得的答案上的复选标记并(稍后)点赞可以帮助其他用户找到好的帖子/答案。

标签: c# string chars


【解决方案1】:

string.ToCharArray() 迭代地创建一个新的 char 数组,并将对新数组的引用存储在 ch 中。不再引用长度为 2 的旧数组,很快就会被垃圾收集器收集。

【讨论】:

  • 我只能假设您因回答一些人认为不应该做的“坏”问题而投了反对票,因此决定惩罚答案。
  • 这样的想法是,回答“坏”问题会鼓励此类问题,就好像它实际上会对提问者或回答者产生任何影响。
  • 什么?什么?你能解释一下吗?垃圾收集器何时收集它以及为什么收集它?我的 char[] 引用指向 char 数组?
  • .NET 中的每个数组都是引用类型,即使它包含值类型(如果您还没有阅读过引用和值类型,我建议您阅读)。如果您使用new 分配内存,它将在变量中存储对该内存的引用。如果变量超出范围,引用计数将减少,如果为 0,垃圾收集器知道您无法再访问该内存并很快将其释放。
  • 哦,是的,我意识到我做了什么。我让我的引用 char[] 指向另一个字符数组(在我的例子中是字符串)
【解决方案2】:

不应该剪掉剩下的“ankata”,只显示“iv”吗?

不,它不会那样工作。您可以在一个简单的循环中将项目分配给数组。

for (int i = 0; i < ch.Length; i++)
{
    ch[i] = name[i];
}
Console.WriteLine(ch);

【讨论】:

    猜你喜欢
    • 2011-06-18
    • 2017-11-27
    • 2011-02-15
    • 1970-01-01
    相关资源
    最近更新 更多