【问题标题】:How to fill List of object?如何填写对象列表?
【发布时间】:2013-02-26 13:38:38
【问题描述】:

我的代码中有一个对象“Kit”。

class Kit
{
    private int _CK_ID;

    public int CK_ID
    {
        get { return _CK_ID; }
        set { _CK_ID = value; }
    }

}

在我的代码中,我想填写一个 Kit 列表

List<Kit> kits = new List<Kit>();

现在我想用数据库中的数据填充工具包

我有一个解决方案:

将数据提供给阅读器,然后循环并将新套件插入列表中。

但我想做“很好”我怎么能做这样的事情

kits.fillData();

【问题讨论】:

    标签: c# asp.net oop


    【解决方案1】:

    这取决于您希望如何构建代码以及您最熟悉的内容可以使用 Entity FrameworkNHibernate 之类的内容。

    这显然取决于您的框架、任务要求和技能组合。

    如果这不是一个选项,您可以执行此操作,基于您的 stored procedure 或 select 语句带出与 Kit 类相同的列名。

    public class KitList : List<Kit>
    {
      public void FillList()
      {
        using (SqlConnection con = new SqlConnection(""))
        {
          var cmd = new SqlCommand("GetData", con);
          var dt = new DataTable();
          var sda = new SqlDataAdapater(cmd);
          sda.Fill(dt);
          foreach(var row in dt.Rows)
          {
            Kit k = new Kit();
            foreach(var col in dt.Columns)
            {
              k.GetType().GetProperty(col.Name).SetValue(obj, row[col.Name], null);
            }
            this.Add(k);
          }
        }
      }
    }
    

    【讨论】:

    • .SetValue(obj, row[col.Name],null);中有一个变量obj obj 是从哪里来的?
    • @joedotnot obj 在这种情况下是 k,抱歉打错了
    【解决方案2】:

    像这样为List&lt;Kit&gt; 创建一个扩展方法:

    public static void fillData(this List<Kit> kits) { }
    

    然后在里面填充kits 对象。现在,您需要将其放入static 类中,并且您需要在要使用它的文件顶部包含命名空间。所以,如果你有这样的代码:

    namespace MyApplication.Extensions
    {
        public static class MyExtensions
        {
            public static void fillData(this List<Kit> kits) { }
        }
    }
    

    然后在你想使用的文件中添加using声明:

    using MyApplication.Extensions;
    

    所以当您有List&lt;Kit&gt; 时,您可以这样做:

    List<Kit> kits = new List<Kit>();
    kits.fillData();
    

    【讨论】:

    • 我认为 OP 想要一种实际填充数据的方法?
    • @LukeHennerley,请注意实际问题。 but i want to do it "nice" how can i do something like this
    • 请注意前面的位 I have one solution to do this 但是 I want a "nice" how can I do something like this
    • 它“很好” - 我收到一个错误错误 1 ​​可访问性不一致:参数类型“System.Collections.Generic.List”比方法“IDD.ClutchKits”更难访问。 MyExtensions.fillData(System.Collections.Generic.List)'
    • @eyalb,如果该类的定义与您的问题中的一样,则它是私有的。
    【解决方案3】:

    为什么Kit 对象会填充自己?

    你可以实现类似的东西:

    class KitCollection : List<Kit>
    {
        public void FillData()
        {
            Random rnd = new Random();
            int i = 10; //let say 10 random data
    
            for (int j = 0; j < 10; j++)
            {
                Kit kit = new Kit();
                kit.CK_ID = rnd.Next(1, 100);
                this.Add(kit);
            }
        }
    }
    

    并像这样使用它:

        KitCollection list = new KitCollection(); // can be easily cast to List<Kit>
        list.FillData();
    

    Random Data ?当然,在这种情况下,您当然可以使用像

    这样的简单方法来填充它
    private static void FillRandomData(List<Kit> lst)
    {
        Random rnd = new Random();
        int i = 10; //let say 10 random data
    
        for (int j = 0; j < 10; j++)
        {
            Kit kit = new Kit();
            kit.CK_ID = rnd.Next(1, 100);
            lst.Add(kit);
        }
    }
    

    【讨论】:

    • 不,套件可以自己填满,因为它是桌子上的一行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 2017-11-08
    • 2020-09-09
    • 2013-07-07
    • 2017-09-25
    相关资源
    最近更新 更多