zoukankan      html  css  js  c++  java
  • Activator.CreateInstance 方法 (Type)和Class1 obj=new Class1()方法实例化

    需要动态的创建一个实例模型的时候,就用Activator.CreateInstance(Type type);

    如果是明确的知道要创建哪个实例的模型,就可以用 new Class1()了。

    也可以通过程序集Assembly.CreateInstance()来创建,不过其实程序集创建也是调用的Activator.CreateInstance(Type type)。

    代码
    public static object GetFromDataTable(DataTable dt, Type objectType, int row)
    {
    if (dt == null)
    {
    return null;
    }
    if (dt.Rows.Count <= row)
    {
    return null;
    }

    object obj = Activator.CreateInstance(objectType);

    PropertyInfo[] props
    = objectType.GetProperties(BindingFlags.Public | BindingFlags.Instance);

    foreach (DataColumn dc in dt.Columns)
    {
    foreach (PropertyInfo p in props)
    {
    if (p.Name.Equals(dc.ColumnName, StringComparison.OrdinalIgnoreCase))
    {
    if (!dt.Rows[row].IsNull(dc.ColumnName))
    {
    object destObj = dt.Rows[row][dc.ColumnName];

    bool succ = false;

    if (p.PropertyType == destObj.GetType())
    {
    succ
    = true;
    }
    else
    {
    if (p.PropertyType == typeof(int))
    {
    succ
    = true;
    int tmpInt = 0;
    int.TryParse(destObj.ToString(), out tmpInt);
    destObj
    = tmpInt;
    }
    else if (p.PropertyType == typeof(long))
    {
    succ
    = true;
    long tmpLong = 0;
    long.TryParse(destObj.ToString(), out tmpLong);
    destObj
    = tmpLong;
    }
    else if (p.PropertyType == typeof(bool))
    {
    succ
    = true;
    bool tmpBool = false;
    bool.TryParse(destObj.ToString(), out tmpBool);
    destObj
    = tmpBool;
    }
    else if (p.PropertyType == typeof(DateTime))
    {
    succ
    = true;
    DateTime tmpDateTime;
    DateTime.TryParse(destObj.ToString(),
    out tmpDateTime);
    destObj
    = tmpDateTime;
    }
    else if (p.PropertyType == typeof(float))
    {
    succ
    = true;
    float tmpFloat;
    float.TryParse(destObj.ToString(), out tmpFloat);
    destObj
    = tmpFloat;
    }
    else if (p.PropertyType == typeof(decimal))
    {
    succ
    = true;
    decimal tmpDecimal;
    decimal.TryParse(destObj.ToString(), out tmpDecimal);
    destObj
    = tmpDecimal;
    }
    else if (p.PropertyType == typeof(double))
    {
    succ
    = true;
    double tmpDouble;
    double.TryParse(destObj.ToString(), out tmpDouble);
    destObj
    = tmpDouble;
    }
    else if (p.PropertyType == typeof(char))
    {
    succ
    = true;
    char tmpChar;
    char.TryParse(destObj.ToString(), out tmpChar);
    destObj
    = tmpChar;
    }
    else if (p.PropertyType == typeof(Int16))
    {
    succ
    = true;
    Int16 tmpInt16;
    Int16.TryParse(destObj.ToString(),
    out tmpInt16);
    destObj
    = tmpInt16;
    }
    else
    {
    succ
    = false;
    }
    }
    if(succ)
    {
    p.SetValue(obj, destObj,
    null);
    }
    }
    }
    }
    }

    return obj;
    }

  • 相关阅读:
    oracle数据库导出与导入
    Mysql导入表信息[Err] 1067
    Golang--不定参数类型
    (转)Docker容器的重启策略及docker run的--restart选项详解
    (转)Golang--使用iota(常量计数器)
    Golang--匿名变量
    Golang--Hello World
    Ubuntu Server16.04 配置网卡
    U盘安装ubuntu 16.04 遇到 gfxboot.c32:not a COM32R image boot 的解决方法
    ipfs私链服务
  • 原文地址:https://www.cnblogs.com/JinvidLiang/p/1871569.html
Copyright © 2011-2022 走看看