【问题标题】:Converting a string array into a short array将字符串数组转换为短数组
【发布时间】:2016-02-03 01:35:06
【问题描述】:

我有一个由用户输入定义的字符串数组,我需要将字符串数组转换为一个短数组,以便可以使用这些值进行计算。我需要使用一个数组,因为稍后我需要共同引用所有值。 这就是我所拥有的:

string [] calIntake = new string[3];
calIntake [0] = Console.ReadLine ();
calIntake[1] = Console.ReadLine ();
calIntake[2] = Console.ReadLine ();

我试过了:

short[] calIntakeNum = Array.ConvertAll(calIntake.split(','), Short.Parse);

我收到一条错误消息:“无法从用法中推断方法 'System.Array.ConvertAll(TInput[], System.Converter)' 的类型参数。尝试明确指定类型参数。

然后我尝试了:

short[] calIntakeNum = Array.ConvertAll(calIntake.split(','), ne Converter<string, short>(Short.Parse));

我得到同样的错误。那么如何将基于用户输入的字符串数组转换成短数组呢?

【问题讨论】:

  • 这是您的确切代码吗? string[] 没有 split 方法。
  • 您能说明一下您希望calIntake.split(',') 做什么吗?另外,当您可能阅读过的文章显示了很多简单的代码Array.ConvertAll时,为什么您要尝试如此奇怪的代码?

标签: c# .net arrays type-conversion


【解决方案1】:

您可以通过short.Parse 方法投影字符串:

short[] calIntakeNum = calIntake.Select(short.Parse).ToArray();

【讨论】:

  • 这是正确的,尽管他根本不应该将数组用于任何事情。如果他的导师想要阵列,他的导师应该在麦当劳找工作。
  • list.Add(item) 不会因为索引超出范围而崩溃。静态初始化时数组是合适的(就像 OP 应该那样)。否则,通用列表更健壮且可维护。我知道有一个学派主张总是编写你可以逃脱的最糟糕的代码。我不是粉丝。你专业写代码多久了?
  • 我知道你不明白。我说“通用列表”是为了将它与 System.Collections.List 区分开来,后者也称为列表,它不是通用的。 Arrays are not generics。您缺乏经验与您不知道为什么固定大小的容器可能会成为问题的事实有很大关系。如果 OP 稍后需要在索引 1 处插入另一个项目怎么办?他必须添加一行新代码并更改另外三个代码。 Array 需要编写更多的工作,需要进行更多的更改,并且 write 和 alter 都更容易出错。最好多次调用 list.Add()。
  • 我提到了一个适合固定大小数组的情况。这些情况很少见。 OP的情况不是一个。 .NET 中的数组不是通用容器类,但这是您出于自己的原因引入的不相关的干扰。 OP的数组初始化代码是垃圾,不应该教给学生。很高兴您可以研究 API 历史。现在学习编程。我跟你没完。
【解决方案2】:

calIntake 已经是一个数组,你不需要Split 它。 C#中没有Short类型,有shortInt16

short[] calIntakeNum = Array.ConvertAll(calIntake, short.Parse);

【讨论】:

    【解决方案3】:

    您尝试的第二种方法失败了,因为您尝试调用不存在的类上的方法,并且因为Short.Parse 不存在。将.split(',') 从您的第一个参数中删除为ConvertAll 并将Short.Parse 更改为short.Parse 将解决此问题:

    short[] calIntakeNum = Array.ConvertAll(calIntake, new Converter<string, short>(short.Parse));
    

    如果您的程序可能,您可以将您的数组最初声明为short[],然后在Console.ReadLine() 上调用short.Parse

    short[] shortArray = new short[3];
    shortArray[0] = short.Parse(Console.ReadLine());
    

    【讨论】:

      猜你喜欢
      • 2013-03-26
      • 2017-11-27
      • 1970-01-01
      • 2018-03-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      相关资源
      最近更新 更多