我有一个代表动态表的类,它将在sql数据库中创建。
public class DynamicTable
{
public List<DynamicField> fieldNames { get; set; }
}
DynamicField表示一对字段名称及其dataType:
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类型更好的方法?
答案 0 :(得分: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>());
也许您可以在type
设置器中检查value.IsValueType
是否为真,如果为false则抛出异常。
希望这会有所帮助,