【问题标题】:create list of dynamically created classes in c#在 C# 中创建动态创建的类的列表
【发布时间】:2015-12-31 16:10:51
【问题描述】:

我使用名为 mMember 的数据库创建了动态类,其中包含一些属性。我想使用这个属性在 wpf 中将数据分配给 datagrid。

      private void Button_Click(object sender, RoutedEventArgs e)
    {

        ICodeCompiler loCompiler = new CSharpCodeProvider().CreateCompiler();
        CompilerParameters loParameters = new CompilerParameters();
        // Start by adding any referenced assemblies
        loParameters.ReferencedAssemblies.Add("System.dll");
        // Must create a fully functional assembly as a string
        lcCode = @"public class mMember
        {
            public  static int cid { get; set; }

            public static  string cFname { get; set; }

            public  static string cLname { get; set; }

            public  static decimal? iAge { get; set; }

            public  static string dpDept_Id { get; set; }

            public static  bool? bEnabled { get; set; }
        }";

        // Load the resulting assembly into memory
        loParameters.GenerateInMemory = false;
        // Now compile the whole thing
        CompilerResults loCompiled =
          loCompiler.CompileAssemblyFromSource(loParameters, lcCode);
        if (loCompiled.Errors.HasErrors)
        {
            string lcErrorMsg = "";
            lcErrorMsg = loCompiled.Errors.Count.ToString() +
                         " Errors:";
            for (int x = 0; x < loCompiled.Errors.Count; x++)
                lcErrorMsg = lcErrorMsg + "\r\nLine: " +
                             loCompiled.Errors[x].Line.ToString() +
                              " - " + loCompiled.Errors[x].ErrorText;
            MessageBox.Show(lcErrorMsg + "\r\n\r\n" + lcCode,
                            "Compiler Demo");
            return;
        }
        Assembly loAssembly = loCompiled.CompiledAssembly;
        Type calcType = loAssembly.GetType("mMember");

        // Retrieve an obj ref - generic type only
        object loObject =
               loAssembly.CreateInstance("mMember");
        PropertyInfo numberPropertyInfo = calcType.GetProperty("cLname");

        numberPropertyInfo.SetValue(loObject, "Kadam", null);

        string value = (string)numberPropertyInfo.GetValue(loObject, null);

        var loResult1 = loObject.GetType().GetProperty("cLname").GetValue(this, null);
        MessageBox.Show(loResult1.ToString());

          if (loObject == null)
        {
            MessageBox.Show("Couldn't load class.");
            return;
        }
   }

现在我想创建上面提到的给定属性的列表动态创建的类 mMember并将这个列表绑定到中的datagrid wpf 。 我想以给定格式创建列表,例如 Order 是我的类名,它还包含像 mMember 类这样的属性,但类是就绪格式。最后,我将 orders 绑定到数据网格。

      List<Order> orders = new List<Order>();

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            orders.Add(new Order() { MB_ID =Convert .ToInt64 ( dt.Rows[i]["MB_ID"]), Name = dt.Rows[i]["MEMBER_NAME"].ToString(), ItemCount = dt.Rows[i]["MB_ID"].ToString(), CompanyId = dt.Rows[i]["COMPANY_ID"].ToString() });
        }
  // Set the data context
        this.DataContext = orders;

现在我想为 mMember 类创建类似的列表。所以我创建了相同的实例,但它没有工作

    IList list1 = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(new Type[] { loObject.GetType() }));

如何将 list 数据添加到其中并绑定到 datagrid

【问题讨论】:

  • 为什么...你为什么要首先尝试这样做?无论你想做什么,我很确定有一个更简单的方法。
  • 你能解释一下吗?但是对于动态创建的类及其属性。提前致谢。
  • 为什么需要创建动态类?

标签: c# wpf list class dynamic


【解决方案1】:

我遇到了同样的问题,并且能够在您的代码和here 的帮助下解决它。您的列表对象本身的创建代码是正确且有效的。之后,您需要使用动态创建的对象填充列表。您只需要创建对象,例如通过“object = Activator.CreateInstance(type)”,填充它们并使用“list1.Add(object)”添加它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 2016-02-04
    • 2023-03-31
    相关资源
    最近更新 更多