假设您有一个名为Type
primitiveType
primitiveType.IsPrimitive == true
的{{1}},你怎么能最简单地(不使用第三方库)创建一个非零的实例价值(例如价值= 1)?
即,该功能可能如下所示:
public static object CreateNonZero(Type primitiveType)
{
if (!primitiveType.IsPrimitive)
{ throw new ArgumentException("type must be primitive"); }
// TODO
}
也就是说,它应该适用于所有原始值类型,例如bool,byte,sbyte,short,ushort,int,uint,long,ulong,float,double,IntPtr,UIntPtr,char等。
答案 0 :(得分:9)
Convert.ChangeType(1, primitiveType)
请注意,如果您希望返回类型与实际类型相匹配而不是object
,那么通用版本相对容易:
public static T CreateNonZero<T>()
{
return (T)Convert.ChangeType(1, typeof(T));
}
如果你想处理IntPtr
和UIntPtr
,我不知道比明确检查类型更优雅的方式
public static object CreateNonZero(Type type)
{
if(type == typeof(IntPtr))
return new IntPtr(1);
if(type == typeof(UIntPtr))
return new UIntPtr(1);
return Convert.ChangeType(1, type);
}