1

我有一个代表将在 sql 数据库中创建的动态表的类。

public class DynamicTable
{
      public List<DynamicField> fieldNames { get; set; }
}

DynamicField 表示一对字段名称及其数据类型:

public class DynamicField
    {
        public Type type {get;set;}
        public String fieldName {get;set;}

 public DynamicField(String fieldName, Type datatype)
        {
           this.fieldName = fieldName;
           this.type = datatype; 
        }

}

我担心的是,你可以传递任何你想要的类型,但我只需要一些特定的数据类型,比如 String、int、date、float。

我怎样才能改进我的代码,只能通过它们?基于使用属性类型在我的sql数据库中正确创建表的想法,有没有比使用System.Type类型更好的方法?

4

1 回答 1

0

我想您可以使用 Generic 进行约束,如下所示。但我也猜想它在您的动态场景中将非常不可用(并且它不会接受可为空的类型)

public class DynamicField
{
    public String fieldName { get; set; }
    private Type _type;

    public DynamicField SetFieldType<T>() where T:struct
    {
        this._type = typeof(T);
        return this;
    }

    public Type GetFieldType()
    {
        return this._type;
    }

    public DynamicField(String fieldName)
    {
        this.fieldName = fieldName;
    }
}

然后,您可以编写如下内容:

   var t = new DynamicTable();
   t.Add(new DynamicField("ColumnA").SetFieldType<String>());

也许您可以只检查为 true 的typesetter,value.IsValueType如果为 false 则抛出异常。

希望这会有所帮助,

于 2013-03-06T09:53:41.057 回答