9

我们可以List<string, string, string>在 C#.NET 中自己制作吗?我需要创建一个列表,其中包含 3 个不同的字符串作为列表中的单个元素。

4

11 回答 11

30

List您当然可以使用三个泛型类型参数创建自己的类。不过,我强烈建议您不要这样做。它会使任何使用您的代码的人感到困惑。

相反,要么使用List<Tuple<string, string, string>>(如果你使用的是 .NET 4,无论如何)或(最好)创建你自己的类来以有意义的方式封装这三个字符串,然后使用List<YourNewClass>.

创建您自己的类将在您编写和阅读代码时更加清晰 - 通过为所涉及的三个不同字符串命名,每个人都会知道它们的含义。您还可以在需要时为班级提供更多行为。

于 2012-05-15T09:18:47.843 回答
11

您可以使用元组来实现这一点。

例如:

var list = new List<Tuple<string,string,string>>();

迭代你可能想做一个简单的值:

    list.ForEach(x=>{
     //x is a Tuple
    });

或者要找到一些特定的元组,您可能需要执行以下操作:

     var list = new List<Tuple<string,string,string>>{
        new Tuple<string,string,string>("Hello", "Holla", "Ciao"),
        new Tuple<string,string,string>("Buy", "--", "Ciao")
     };

     list.Where(x=>x.Item2 == "--");

这将返回最后一个元组。

于 2012-05-15T09:19:47.210 回答
3

您可以使用元组列表。像这样:

List<Tuple<string, string, string>>
于 2012-05-15T09:18:31.667 回答
3

也许是这样的:

var ls= new List<Tuple<string,string,string>>();
于 2012-05-15T09:19:10.597 回答
3

我推荐这个解决方案

 public class MyCustomClass
    {
        public string MyString1 { get; set; }
        public string MyString2 { get; set; }
        public string MyString3 { get; set; }
    }

    class MyApp
    {
        public MyApp()
        {
            List<MyCustomClass> customList = new List<MyCustomClass>();
            customList.Add(new MyCustomClass
            {
                MyString1 = "Hello",
                MyString2 = "Every",
                MyString3 = "Body",
            });
        }
    }
于 2012-05-15T09:42:28.353 回答
2

例如:

var list = new List<Tuple<string, string, string>>();
var tuple = Tuple.Create("a", "b", "c");
list.Add(tuple);

有关更多信息,请查看MSDN

于 2012-05-15T09:33:51.300 回答
1

制作一个怎么样List<Tuple<string, string, string>>

一个更好的主意可能是,如果每个字符串都有特定的含义,则将它们全部放入一个类中,然后创建一个列表。

于 2012-05-15T09:19:26.707 回答
0

不,遗憾的是这不起作用。您可以做的最好的事情是创建一个列表列表,或者利用 IDictionary 接口的某种形式的实现。

尽管如此,如果您有以这种方式属于一起的三项数据,那么创建一个包含它们的类可能是值得的。

这将使您有机会在您的应用程序周围传递一个列表,并为每个数据项分配有意义的名称。永远不要低估六个月后可读性的力量。

于 2012-05-15T09:23:41.353 回答
0

您可以定义一个 List 并实现所需的接口(例如 IList)。代码爆炸。

public class List<T1, T2, T3> : IList
{

    #region IList Members

    public int Add(object value)
    {
        throw new NotImplementedException();
    }

    public void Clear()
    {
        throw new NotImplementedException();
    }

    public bool Contains(object value)
    {
        throw new NotImplementedException();
    }

    public int IndexOf(object value)
    {
        throw new NotImplementedException();
    }

    public void Insert(int index, object value)
    {
        throw new NotImplementedException();
    }

    public bool IsFixedSize
    {
        get { throw new NotImplementedException(); }
    }

    public bool IsReadOnly
    {
        get { throw new NotImplementedException(); }
    }

    public void Remove(object value)
    {
        throw new NotImplementedException();
    }

    public void RemoveAt(int index)
    {
        throw new NotImplementedException();
    }

    public object this[int index]
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }

    #endregion

    #region ICollection Members

    public void CopyTo(Array array, int index)
    {
        throw new NotImplementedException();
    }

    public int Count
    {
        get { throw new NotImplementedException(); }
    }

    public bool IsSynchronized
    {
        get { throw new NotImplementedException(); }
    }

    public object SyncRoot
    {
        get { throw new NotImplementedException(); }
    }

    #endregion

    #region IEnumerable Members

    public IEnumerator GetEnumerator()
    {
        throw new NotImplementedException();
    }

    #endregion
}

不过,List<Tuple<string,string,string>>推荐。

于 2012-05-15T09:31:33.700 回答
0
public class Listt< T, T1, T2>
    {
         public Listt()
        {

        }
        public void Add(T item, T1 item1, T2 item3)
        {

        }
    }


public partial class MyApp : Window
{

 public MyApp()

 {

  InitializeComponent();

     Listt<string, string, string> customList = new Listt<string, string, string>();
     customList.Add("we","are","here");

  }
}
于 2012-05-15T09:33:06.183 回答
0

有人试过dynamic吗?

var list = new List<dynamic>();
list.Add(new { Name = "SampleN", Address = "SampleA", Email = "SampleE" });

var name = list[0].Name;
于 2016-07-28T07:22:52.147 回答