public class EnumClass<T>
    {
        public static T GetConvertToT(object ct, int enumValue)
        {
            T tValue;
            switch (enumValue)
            {
                case 1:
                    tValue = Convert.ToInt16(ct);
                    break;
                case 2:
                    tValue = Convert.ToInt32(ct);
                    break;
                case 3:
                    tValue = System.DBNull.Value.Equals(ct) ? "" : (string)ct;
                    break;
                case 4:
                    tValue = Convert.ToDateTime(ct);
                    break;
                case 5:
                    tValue = Convert.ToBoolean(EnumClass<Int16>.GetConvertToT(ct, 1));
                    break;
            }
            return tValue;
        }
    }

解决方案 »

  1.   

    上面的代码跑起来肯定有“无法将类型“int”隐式转换为“T””,帮解决这个问题并达到这个GetConvertToT这个方法的效果
      

  2.   

    public class EnumClass<T>
        {
            public static T GetConvertTo(object ct, int enumValue)
            {
                T tValue = default(T);
    if(ct != null)
    {
    return (T)ct;
    }                        return tValue;
            }
        }
      

  3.   

    如果用vb.net, Option Strict Off 就好了
      

  4.   


    public class EnumClass<T>
        {
            public static T GetConvertToT(object ct, int enumValue)
            {
                T tValue = default(T);
                switch (enumValue)
                {
                    case 1:
                        tValue = (T)(Object)Convert.ToInt16(ct);
                        break;
                    case 2:
                        tValue = (T)(Object)Convert.ToInt32(ct);
                        break;
                    case 3:
                        tValue = (T)(Object)(System.DBNull.Value.Equals(ct) ? "" : (string)ct);
                        break;
                    case 4:
                        tValue = (T)(Object)Convert.ToDateTime(ct);
                        break;
                    case 5:
                        tValue = (T)(Object)Convert.ToBoolean(EnumClass<Int16>.GetConvertToT(ct, 1));
                        break;
                }
                return tValue;
            }
        }
      

  5.   

    public class EnumClass<T>
        {
            public static T GetConvertToT(object ct, int enumValue)
            {
                T tValue = default(T);
                switch (enumValue)
                {
                    case 1:
                        tValue = (T)Convert.ToInt16(ct);
                        break;
                    case 2:
                        tValue = (T)Convert.ToInt32(ct);
                        break;
                    case 3:
                        tValue = (T)(System.DBNull.Value.Equals(ct) ? "" : (string)ct);
                        break;
                    case 4:
                        tValue = (T)Convert.ToDateTime(ct);
                        break;
                    case 5:
                        tValue = (T)Convert.ToBoolean(EnumClass<Int16>.GetConvertToT(ct, 1));
                        break;
                }
                return tValue;
            }
        }
      

  6.   

    5楼的方法让人感觉得不偿失,Convert.ToInt16这个时候其实是可以确定T就是Int16类型,多余的强制转换让人心疼
      

  7.   

    我贴的代码不可以?你都不用enum判断的。object可以直接转T
      

  8.   

    感觉思路有问题,既然统一返回T类型,Convert为不同的类型啥用意?
      

  9.   

    设计有问题。从你的代码看,
    enumValue是一个冗余的设计
      

  10.   

    天马行空 ,天兄的可以,不过因为Object ct 这个是从SqlDataReader reader[""]中取的对象,需要判断DBNull
      

  11.   

    我设计时当时想条件是这样的:因为可以确定T为Int16,Int32,string,DateTime,bool,5种类型,而Object ct 这个是从SqlDataReader reader[""]中取的对象,需要判断DBNull。我想通过用户直接指定(enumValue)要转换的类型,而只设计一个方法。
      

  12.   

    那你把哪句话加一个判断就可以了
    if(cj != null && cj != DBNull.Value)
    {
    return (T)cj;
    }
      

  13.   

    SqlDataReader 有GetInt32,GetDateTime等方法的吧,直接用就可以呀,如果是空就抛出异常好了
      

  14.   

    我知道你意思了,
    那要么SqlDataReader reader[""]后自己转换
    函数返回值必须是唯一的,不可能一会返回int,一会返回string
      

  15.   

    public class EnumClass <T> 
        { 
            public static T GetConvertTo(object ct, int enumValue) 
            { 
                T tValue = default(T); 
    if(ct != null) 

    tValue =(T)ct; 
    }                         return tValue; 
            } 
        } 
    回去详细测试了一下,是错误地,当时测试的时候有加DBNull导致输出的结果是default(T)的值,没去测DateTime。刚测试DateTime时候出异常
      

  16.   

    DateTime出错?
    把你的测试代码贴出来。
      

  17.   

    Object就是可以直接用
    (T)转换的
      

  18.   

    泛型化类在生成对象的时候T就已经确定下来了,难道要让用户这样用?
    short    val1 = EnumClass<Int16>.GetConvertTo(myObj1,    1);
    int      val2 = EnumClass<Int32>.GetConvertTo(myObj2,    2);
    string   val3 = EnumClass<String>.GetConvertTo(myObj3,   3);
    DateTime val4 = EnumClass<DateTime>.GetConvertTo(myObj4, 4);
    Boolean  val5 = EnumClass<Boolean>.GetConvertTo(myObj5,  5);?
      

  19.   

    不就是SqlDataReader 返回的是对象么,如果能解决微软早解决了,既然微软用object,那就object好了,装箱拆箱不会要很多时间的,何况你要返回的才一个值。