【问题标题】:C# How to create a list of classesC#如何创建类列表
【发布时间】:2011-12-26 13:34:15
【问题描述】:

我是 C# 新手,但不是编程新手。首先,非常感谢您的帮助!

我想要一个适当的类或结构,它有 3 个变量。一个字符串和两个日期时间。

我想创建一个将新类存储在列表中的循环。

类似:

对于 dataViewer 中的每个项目
创建新类
分配变量
将类存储在列表中
下一个

非常感谢您的帮助

【问题讨论】:

  • 您在哪方面需要帮助?定义一个类?实例化类?创建一个循环?创建列表?如果您向我们展示您的尝试,将会有所帮助。
  • 这个问题的惊人之处在于有 5 个(严肃的)答案
  • 这是因为这里的每个人都摇滚!
  • @CodingIsAwesome:未来:meta.stackexchange.com/questions/2950/… ;)
  • 对术语的更正:类是public class Thing { ... } 的定义,您可以创建类的实例 - Thing t = new Thing()

标签: c# arrays list class loops


【解决方案1】:
public class Foo
{
    public Foo(string name, DateTime dt1, DateTime dt2)
    {
        Name = name;
        DT1 = dt1;
        DT2 = dt2;
    }

    public string Name { get; set; }
    public DateTime DT1 { get; set; }
    public DateTime DT2 { get; set; }
}

public class Example
{
    public List<Foo> example(DataView dataViewer)
    {
        var foos = new List<Foo>();        

        foreach(var data in dataViewer)
        {
            foos.Add(new Foo(data.Name, data.DT1, data.DT2);
        }

        return foos;
    }
}

【讨论】:

    【解决方案2】:

    您可以使用 LINQ 轻松做到这一点:

    var list = dataViewer
        .Select(item => new YourClass
        {
            StringProperty = ...,
            DateTimeProperty1 = ...,
            DateTimeProperty2 = ...
        })
        .ToList();
    

    它可以让您陈述您的意图(从 dataViewer 中的每个 item 创建一个 YourClass 对象列表),而无需强调其背后的机制(循环等)

    编辑:如果您不需要列表,只需要一个序列,使用查询语法(相同含义)看起来也不错:

    var yourClasses =
        from item in dataViewer
        select new YourClass
        {
            StringProperty = ...,
            DateTimeProperty1 = ...,
            DateTimeProperty2 = ...
        };
    

    【讨论】:

    • 事实上,你并不特别需要最后的 ToList(),除非你特别希望它是一个 List 而不仅仅是一个 IEnumerable。
    • @Mike Goodwin:好点。我更新了我的答案以包含您建议的版本。
    【解决方案3】:

    试试这个:

    public class YourClass
    {
        public string YourString {get; set;}
        public DateTime YourDate1 {get; set;}
        public DateTime YourDate2 {get; set;}
    
        public YourClass(string s, DateTime d1, DateTime d2)
        {
            YourString = s;
            YourDate1 = d1;
            YourDate2 = d2;
        }
    }
    
    public List<YourClass> Read()
    {
        List<YourClass> list = new List<YourClass>();
        foreach(var item in dataViewer)
            list.Add(new YourClass(s,d1,d2)); // Read variables from item...
        return list;
    }
    

    【讨论】:

      【解决方案4】:
      public class Appropriate
      {
          public string Value { get; set; }
          public DateTime Start { get; set; }
          public DateTime End { get; set; }
      }
      

      IList<Appropriate> list = new List<Appropriate>();
      
      foreach(var item in dataViewer) {
          list.Add(new Appropriate() {
              Value = item["value"],
              Start = item["start"],
              End = item["end"]
          });
      }
      

      IList<Appropriate> list = new List<Appropriate>();
      
      dataViewer.ToList().ForEach(i => list.Add(new Appropriate() {
          Value = item["value"],
          Start = item["start"],
          End = item["end"]
      });
      

      【讨论】:

        【解决方案5】:

        可能是这样的

        var list = new List<YourClass>();
        
        foreach(var item in dataViewer) {
            var cls = new YourClass();
            // Assign variables here
            // cls.Test = item.Test;
        
            list.Add(cls);
        }
        

        【讨论】:

        • 所以我什至不需要在 C# 中使用指针来完成此操作?它只会知道我想做什么?
        • 我只能说,虽然我有一个不同的问题,但这个答案帮助我理解了创建用于输出 json 的类列表的问题。谢谢!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-04
        • 1970-01-01
        • 2012-10-27
        • 1970-01-01
        • 2010-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多