使用泛型方法计算C#中的值类型(int,float,string)

时间:2015-05-12 19:40:26

标签: c# generics types .net-4.0 value-type

我想编写计算值类型大小的方法。但我不能将值类型(int,double,float)作为方法参数。

   /*
    *When i call this method with SizeOf<int>() and 
    *then it returns 4 bytes as result.
    */
   public static int SizeOf<T>() where T : struct
   {
       return Marshal.SizeOf(default(T));
   }

   /*
    *When i call this method with TypeOf<int>() and 
    *then it returns System.Int32 as result.
    */
   public static System.Type TypeOf<T>() 
   {
       return typeof(T);
   }

我不希望这样。我想写下这个方法。

   /*
    *When i call this method with GetSize(int) and 
    *then it returns error like "Invalid expression term 'int'".
    */
   public static int GetSize(System.Type type)
   {
       return Marshal.SizeOf(type);
   }

那么如何将值类型(int,double,float,char ..)传递给方法参数来计算它的大小为通用。

2 个答案:

答案 0 :(得分:1)

您现有的代码正常运作:

public static int GetSize(System.Type type)
{
    return Marshal.SizeOf(type);
}

不确定该错误来自您发布的错误,但不是来自此错误。如果你愿意,你可以使这个通用:

public static int GetSize<T>()
{
    return Marshal.SizeOf(typeof(T));
}

答案 1 :(得分:1)

GetSize(int)出错的原因是int不是值。您需要像typeof这样使用GetSize(typeof(int)),或者如果您有一个实例,那么:GetSize(myInt.GetType())