当conversionType是一个可以为null的int时,如何使用Convert.ChangeType()

Dar*_*arf 6 c#

我的意思是,我想转换这个:

string a = 24;
Convert.ChangeType(a, typeof(decimal?))
Run Code Online (Sandbox Code Playgroud)

但它给我一个错误.

更新1:

我有一个Type对象,其中可以是decimal?,int?,..许多可以为null的类型.然后使用Type对象,我需要转换类型对象中的字符串值.

Dro*_*ror 21

看到一个优秀的答案在这里:

public static T GetValue<T>(string value)
{
   Type t = typeof(T);
   t = Nullable.GetUnderlyingType(t) ?? t;

   return (value == null || DBNull.Value.Equals(value)) ? 
      default(T) : (T)Convert.ChangeType(value, t);
} 
Run Code Online (Sandbox Code Playgroud)

例如:

string a = 24;
decimal? d = GetValue<decimal?>(a);
Run Code Online (Sandbox Code Playgroud)


Zia*_*iad 5

这是基于Dror的答案,但在处理空值时略微减少了开销:

public static T GetValue<T>(string value)
{
   if(value == null || DBNull.Value.Equals(value))
       return default(T);

   var t = typeof(T);
   return (T)Convert.ChangeType(value, Nullable.GetUnderlyingType(t) ?? t);
} 
Run Code Online (Sandbox Code Playgroud)


Dan*_*ite 3

你不能这样做,因为Nullable<T>不实现IConvertable.

不过你可以这样做。

string a = 24;
decimal? aAsDecimal = (decimal)Convert.ChangeType(a, typeof(decimal));
Run Code Online (Sandbox Code Playgroud)

您可能也对我感兴趣吗TryParse