【问题标题】:Append a Lists Contents to another List C#将列表内容附加到另一个列表 C#
【发布时间】:2009-12-01 11:27:16
【问题描述】:

我有以下几点:

  1. 名为 GlobalStrings 的主列表
  2. 另一个名为 localStrings 的列表

以循环为例:

List<string> GlobalStrings = new List<string>(); 
List<string> localStrings = new List<string>();
for(x=1;x<10;x++)
{
    localStrings.Add("some value"); 
    localStrings.Add("some value");
}
// Want to append localStrings to GlobalStrings as easily as possible

【问题讨论】:

  • 堆栈溢出总是摇摆不定...好问题...
  • 你做错了,localStrings = new List&lt;string&gt;;应该放在for循环之前
  • Wassim,我认为这就是他区分本地和全球的原因; localStrings 在 for 循环范围内是本地的,GlobalStrings 在全局范围内。
  • 这是一个糟糕的例子(它会招致像 Wassim 这样的完全错误的 cmets),因为显然你可以将 Add 发送到 GlobalStrings 而不是 localStrings。而你循环的 FWIW 只运行 9 次。最好是for (int x = 0; x &lt; 10; ++x) {var localStrings = GetAListOfStrings(); /* append those to GlobalStrings */}
  • 11 年后...

标签: c#


【解决方案1】:
GlobalStrings.AddRange(localStrings);

注意:您不能使用接口 (IList) 声明列表对象。
文档:List&lt;T&gt;.AddRange(IEnumerable&lt;T&gt;).

【讨论】:

    【解决方案2】:
    GlobalStrings.AddRange(localStrings);
    

    这行得通。

    文档:List&lt;T&gt;.AddRange(IEnumerable&lt;T&gt;)。

    【讨论】:

    • 一个角色失去了你的支持。请注意,它往往会让你失去更多! (比如睡眠或理智。)
    • 虽然正确,但此答案现在与 Lee 的答案相同。
    【解决方案3】:

    试试 AddRange 方法:

    GlobalStrings.AddRange(localStrings);
    

    【讨论】:

    • 虽然正确,但此答案现在与 Lee 的答案相同。
    【解决方案4】:

    使用 Linq

    var newList = GlobalStrings.Append(localStrings)
    

    【讨论】:

    • Append 似乎不存在?你有 MSDN 文档的链接吗?
    • 也许你的意思是 Concat ......虽然这意味着大量的复制,并且很好地说明了如何不使用 LINQ。
    【解决方案5】:

    这是我的例子:

        private List<int> m_machinePorts = new List<int>();
    
        public List<int> machinePorts
        {
            get { return m_machinePorts; }
        }
    
        Init()
        {
            // Custom function to get available ethernet ports
            List<int> localEnetPorts = _Globals.GetAvailableEthernetPorts();
    
            // Custome function to get available serial ports
            List<int> localPorts = _Globals.GetAvailableSerialPorts();
    
            // Build Available port list 
            m_machinePorts.AddRange(localEnetPorts);
            m_machinePorts.AddRange(localPorts);
         }
    

    【讨论】:

      【解决方案6】:

      如果你想得到“简洁”:)

      List<string>GlobalStrings = new List<string>(); 
      
      for(int x=1; x<10; x++) GlobalStrings.AddRange(new List<string> { "some value", "another value"});
      

      【讨论】:

        【解决方案7】:

        如果你想得到“简洁”:)

        GlobalStrings.AddRange(localStrings);
        

        【讨论】:

        • 请在发布您自己的答案之前查看现有答案 - 这个确切的答案已被其他人多次发布,十多年前。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-13
        • 2015-07-11
        • 2020-10-29
        • 1970-01-01
        • 2021-03-17
        相关资源
        最近更新 更多