【问题标题】:Initialize a List<int> with LINQ query使用 LINQ 查询初始化 List<int>
【发布时间】:2011-08-20 05:08:27
【问题描述】:

我通过存储两个简单的常量 MinValue 和 MaxValue 在构造函数中初始化 List&lt;int&gt;

private const int MinValue = 1;
private const int MaxValue = 100;

private List<int> integerList = new List<int>();

public Class()
{
    for (int i = MinValue ; i < MaxValue ; i++)
    {
        integerList .Add(i);
    }
}

有没有办法用简单的 LINQ 查询来初始化列表?由于List&lt;T&gt; 可以用IEnumerable&lt;T&gt; 构造,是否存在以下形式的查询?

private List<int> integerList = new List<int>(<insert query here>);

这可能吗?

【问题讨论】:

  • 请注意,MaxValue 在您的代码中是独占的,即它将生成一个值从 1 到 99 的列表。这是故意的吗?
  • @Guffa - 实际上是这样,但感谢您指出这一点。

标签: c# linq


【解决方案1】:

这可以使用Enumerable.Range来实现

List<int> integerList = Enumerable.Range(MinValue, MaxValue - MinValue).ToList();

【讨论】:

    【解决方案2】:

    只需使用Enumerable.Range(int start, int count) method

    生成指定范围内的整数序列。

    一个简单的例子,使用你的 MinValueMaxValue 变量:

    List<int> integerList = Enumerable.Range(MinValue, MaxValue - MinValue).ToList();
    

    请注意,如果MaxValue 小于MinValue,则count 参数将小于零并抛出ArgumentOutOfRangeException

    【讨论】:

      【解决方案3】:

      假设 MaxValue 始终 > MinValue,

      var integerList = Enumerable.Range(MinValue, MaxValue-MinValue).ToList();
      

      【讨论】:

        【解决方案4】:

        您可以使用集合初始化器。

        http://msdn.microsoft.com/en-us/library/bb384062.aspx

        私有列表 integerList = new List{MinValue, MaxValue};

        【讨论】:

        • 啊,我没有意识到它是包容性的......是的,使用 Enumerable.Range
        【解决方案5】:

        你可以使用Enumerable.Range

        List<int> integerList = Enumerable.Range(MinValue, MaxValue - MinValue).ToList();
        

        【讨论】:

          【解决方案6】:

          试试 IEnumerable.Range(MinValue, MaxValue-MinValue).ToList(): MSDN

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-01-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-02-13
            • 1970-01-01
            相关资源
            最近更新 更多