【问题标题】:C# Instantiate List by Calling a FunctionC# 通过调用函数来实例化列表
【发布时间】:2016-09-19 19:28:01
【问题描述】:

有没有更简洁的写法:

var voucherCodes = new List<string>();

for (int i = 0; i < 10; i++)
{
    voucherCodes.Add(GenerateCode(VoucherCodeLength));
}

我想做这样的事情:

// ten items would be added to the list so long as GenerateCode returns a string
var voucherCodes = new List<string>(GenerateCode(VoucherCodeLength), 10);

当然,我可以创建自己的函数,但我想知道是否已经存在某些东西。

【问题讨论】:

  • Enumerable.Range(0, 10).Select(n =&gt; GenerateCode(VoucherCodeLength)).ToList();
  • 当前实现有什么问题?它有效,可读,简短。
  • @Dennis Fair 问题。我认为尽可能减少代码是件好事。如果存在像 Enumerable.Range() 这样可读的东西,那么我最好使用它而不是创建自己的函数或使用 for 循环,这是我的看法。
  • @Dennis 就我个人而言,在这种特殊情况下,我更喜欢单线,但我同意原版还不错。口味问题。也许OP也喜欢单线。有些单行是恐怖表演;这没关系海事组织。

标签: c# linq


【解决方案1】:

我不能说它是否更好,但您可以使用以下 LINQ“单线”:

var voucherCodes = Enumerable.Range(0, 10).Select(_ => GenerateCode(VoucherCodeLength)).ToList();

或者专门针对这个调用,如果VoucherCodeLength 是恒定的(或者不改变并且没有副作用),则更短:

var voucherCodes = Enumerable.Repeat(VoucherCodeLength, 10).Select(GenerateCode).ToList();

【讨论】:

  • 我喜欢这种方法。感谢分享。
【解决方案2】:

另一种方法

var voucherCodes = Enumerable.Repeat(GenerateCode(VoucherCodeLength), 10).ToList();

【讨论】:

  • 这与@InBetween 的回答(当前已删除)具有相同的缺陷
  • @IvanStoev 我现在读了,但由于问题不清楚,我暂时留下答案......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2020-10-27
  • 1970-01-01
相关资源
最近更新 更多