【问题标题】:Creating c# object at runtime with dynamic fields and attributes在运行时使用动态字段和属性创建 c# 对象
【发布时间】:2013-08-18 05:34:54
【问题描述】:

我正在为我的 android 应用程序使用 ORM 系统 (sqlite-net)。我希望能够动态创建我的数据库映射类,并且能够向成员添加属性,这可能吗?我需要动态创建这样的东西:

class ConfigData
{
    [PrimaryKey, AutoIncrement]
    public int id { get; set; }
    [MaxLength(20)]
    public string ip { get; set; }
    [MaxLength(128)]
    public string port { get; set; }
}

提前致谢。

【问题讨论】:

  • 这真的取决于将要消耗对象的内容。不同的 API 支持不同的模型。有时你只是有反思;有时你有 ComponentModel;有时您可以使用dynamic。真的真的取决于谁会消费它。 “仅反射”是“适用于大多数地方”的选项,但需要 TypeBuilder 之类的内容。另外,虽然:在编译时定义 ConfigData 有什么问题?
  • 这里的问题是我试图在不同的表结构之间创建一个小版本转换器。例如,我想知道 ConfigData 版本 10 中的字段 ip 在版本 5 中是如何命名的(因为我需要导出到以前的版本)。我需要这个来将表格版本中的数据提供给下面的另一个版本。这就是为什么我想根据我想要获得的版本动态定义 ConfigData。无论如何,我现在正在考虑使用类/成员属性,看看是否可以以更简单的方式完成此操作。

标签: c#


【解决方案1】:

也许反射命名空间是你可能使用的,这里有一个例子:http://mironabramson.com/blog/post/2008/06/Create-you-own-new-Type-and-use-it-on-run-time-(C).aspx

【讨论】:

  • 这可能是一个不错的选择。你知道如何给成员变量添加属性吗?
【解决方案2】:

在 C# 4.0 中可以使用动态类型。

【讨论】:

  • 难道不能使用 Reflection 和 TypeBuilder 类吗?
  • 非常欢迎提供更多信息。 ExpandoObject 呢?
  • @Notbad 确实,ExpandoObject 是dynamic 的一个方便且常见的实现
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-26
  • 2011-02-21
  • 2017-09-02
  • 1970-01-01
  • 2020-08-04
  • 1970-01-01
相关资源
最近更新 更多