【问题标题】:System.Array does not contain a definition for ToArraySystem.Array 不包含 ToArray 的定义
【发布时间】:2014-11-23 14:35:45
【问题描述】:

如何在.Split() 之后得到这个int[] 数组?

string s = "1,2,3,4";
int[] a = s.Split(',').ToArray<int>();

【问题讨论】:

  • 无法从 string[] 转换为 int[]

标签: c# asp.net


【解决方案1】:

Split 不会神奇地为您提供 int 值,它会返回一个字符串数组。所以你必须转换。

s.Split(',').Select(x => Convert.ToInt32(x)).ToArray();

【讨论】:

  • 这就是我认为我对 .ToArray&lt;int&gt;() 所做的事情
  • .Select(Convert.ToInt32) 不也能正常工作吗?
  • @BenjaminGruenbaum 不是这种情况,我认为(可能是因为它们是 Convert.ToInt32 的多个重载?)。
  • @RaphaëlAlthaus 哦,对了,推理会失败。执行.Select(int.Parse) 应该可以正常工作并且更短。
  • @ZeeTee 好吧不,这不做任何转换,它只是一个扩展方法,泛型类型必须相同。
【解决方案2】:

我会按照 Raphaël 所说的那样做,但如果您不熟悉 lambda 表达式(x => .. 部分),您可以改用它。两者都会给你一个 int 数组,Raphaëls 的例子更可取,但是当你不知道它们是如何工作的时候 Lambda 表达式可能会很可怕:P(基本上它的意思是“对于每个字符串 x,做 Convert.ToInt32(x) ”。

int[] a = s.Split(',').Select(int.Parse).ToArray();

【讨论】:

  • @RaphaëlAlthaus 肯定它会编译,为什么不呢?这只是一个方法组。无需将东西包装在函数包装器中。
  • @L.B yup,必须刷新我的方法组定义;)
猜你喜欢
  • 2013-11-15
  • 2015-02-05
  • 2012-09-29
  • 2015-07-24
  • 1970-01-01
  • 2011-06-21
  • 2021-08-16
  • 2014-07-02
  • 2014-12-19
相关资源
最近更新 更多