如何识别Int,String,Generic Type或类的<t>类型

时间:2018-06-13 06:19:47

标签: c# string generics types int

这是我的代码, 我正在尝试但失败了。 T采用任何类型的DataType,Class或Generic类。基于类型中的类型分配值。

   public T ToObject<T>()
        {
            //T is : int,int?,string,float,decimal 
            if (typeof(T).IsValueType)
            {
                //TO DO : Return Value Type
            }    
            //T is Generic List<User> 
            if (typeof(T).IsGenericType)
            {
                //TO DO : Return List of Object
            }
            else
            {
                //T is User 
                //TO DO : Return Object
            }                
            return default(T);
        }

2 个答案:

答案 0 :(得分:2)

string不是值类型,因此您的第一个条件会立即中断。

你真的不清楚你在问什么,这至少可以说是奇怪的。但是,在你的第一个例子中IsValueType只是不工作,结构怎么样?你将如何区分?您可以使用属性IsPrimitive,但要小心,因为我们可以认为某些类型是基元,但它们不是,例如DecimalString,{{1 },DateTime等等。

TimeSpan

然而,这段代码对于可空类型不起作用,它们不会被标记为原始代码。

我真的认为你需要重新考虑你的设计,你将不得不做出如此多的例外,并且它会在各地突破。

仿制药真的是你想要的吗?

FWIW,我认为你在其他地方有设计或架构问题导致你需要使用这样的通用方法,或者你对什么类型和可归类为不切实际的期望。

但是,如果你真的对此有所了解,你可以试探性地使用类似下面的“原始类似”类型

由于xanatos sugestions

已更新

if (t.IsPrimitive || t == typeof(Decimal) || t == typeof(String) || ... )
{
    // Is Primitive, or Decimal, or String
}

免责声明,对于您使用此代码造成伤害和伤害的人,我不承担任何责任

答案 1 :(得分:-2)

Type typeValue = typeof(T);

您可以参考typeof了解更多详情