在C#中创建一个List <string,string,=“”string =“”>,在一个数据类型中包含三个灵活元素</string,>

时间:2013-09-04 17:35:48

标签: c# .net string list

一旦我定义了一个List<string, string, string>,现在我想再次这样做但是我忘记了语法并丢失了我做的那个示例代码,但我肯定知道这是可能的。在我定义它之后,我以这种方式向列表中添加了一个新元素:ListXY.Add("string1", "string2", string3");。我在互联网上的搜索并没有带来我需要的结果。我绝对坚持使用“List”解决方案,这就是为什么我现在在这里问我的问题。我发现下面的解决方法不能满足我,因为我需要通常的“列表”的简单性 - 没有别的。

我不主要搜索带有元组或自己的类或静态数组的解决方案,因为 我作为初学者难以处理复杂的结构或类。

编辑:我发现同时Dictionary<string, string>但我需要三个项目。 我不记得我用过什么,我只知道它已经准备好了(来自MS) 在框架NET 2中,有三个字符串元素,我可以使用.Add方法扩展元素。字符串数组已经具有静态大小,我无法使用初学者代码缩小或放大它。当我定义变量时,无法预见元素的最终计数,这就是问题所在。

如果您知道我忘记但又找不到的语法,您可以回答我正确答案。 我目前正在搜索语法。

4 个答案:

答案 0 :(得分:8)

如果您要求语法一次初始化包含多个元素的列表,那么:

var l = new List<string>{ "string1", "string2", "string3" .... };

如果你正在寻找一种方法来在一个列表项中保存三个字符串,而不使用元组或自定义类,那我就无法做到这一点,我担心。

编辑:除非您正在生成字符串 - 在这种情况下,您可以使用匿名类型生成它们,例如:

Enumerable
    .Range(1, 100)
    .Select(i => new 
    { 
        string1 = "string1" + i, 
        string2 = "string2" + i, 
        string3 = "string3" + i 
    });

但这真的很奇怪。

此外,您可以使用列表列表,例如:

var l = new List<List<string>>
{ 
    new List<string> { "string 1", "string 2", "string 3" }, 
    new List<string> { "string 1", "string 2", "string 3" }
};

答案 1 :(得分:1)

“我不需要一个让我自己上课的解决方案。我绝对不会重新发明现有的数据类型!” List<string,string,string>不是现有的数据类型。你可能在过去做过这样的事情;

// Another simple way would be to create a class which has a constructor to hold the three strings
    public class PairedValues
    {
        // These are just simple ways of creating a getter and setter in c#
        public string value1 { get; set; }
        public string value2 { get; set; }
        public string value3 { get; set; }

        // A constructor which sets all your getters and setters
        public PairedValues(string Value1, string Value2, string Value3)
        {
            value1 = Value1;
            value2 = Value2;
            value3 = Value3;
        }
    }

利用班级;

        // Simply initialize a list of your new class
        List<PairedValues> pairedValues = new List<PairedValues>();
        // add you object to the list anonymously 
        pairedValues.Add(new PairedValues("string1","string2","string3"));
        pairedValues.Add(new PairedValues("string1", "string2", "string3"));

        // Accessing the values
        foreach (PairedValues pair in pairedValues)
        {
            string value1 = pair.value1;
            string value2 = pair.value2;
            string value3 = pair.value3;
        }

在Windows窗体中使用它的示例;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class Form1 : Form
    {
        // Another simple way would be to create a class which has a constructor to hold the three strings
        public class PairedValues
        {
            public string value1 { get; set; }
            public string value2 { get; set; }
            public string value3 { get; set; }

            public PairedValues(string Value1, string Value2, string Value3)
            {
                value1 = Value1;
                value2 = Value2;
                value3 = Value3;
            }
        }

        public Form1()
        {
            InitializeComponent();

            // Simply initialize a list of your new class
            List<PairedValues> pairedValues = new List<PairedValues>();
            pairedValues.Add(new PairedValues("string1", "string2", "string3"));
            pairedValues.Add(new PairedValues("string1", "string2", "string3"));

            // Accessing the values
            foreach (PairedValues pair in pairedValues)
            {
                string value1 = pair.value1;
                string value2 = pair.value2;
                string value3 = pair.value3;
            }
        }
    }
}

答案 2 :(得分:0)

您可能正在考虑曾经创建的扩展方法。

public static class MyExtensions
{
    public static void Add(this List<String> list, String param1, String param2, String param3)
    {
        list.Add(param1);
        list.Add(param2);
        list.Add(param3);
    }
}

然后只要您使用System.Linq,就可以在任何List实例上调用它:

    List<String> stringList = new List<String>();
    stringList.Add("something", "awesome", "here");

有关扩展方法及其工作方式的详细信息,请转到here

答案 3 :(得分:0)

如果您真的不想创建一个类,则可以使用元组,它们并不那么复杂。

List<Tuple<string,string,string>> items 
= new List<Tuple<string, string, string>>(){ Tuple.Create("a","b","c")};

items.Add(Tuple.Create("1","2","3"));
items.Add(Tuple.Create("4","5","6"));