我想将字符串转换为小数?参考上一个问题here
其中一个答案给出了一个对象扩展来转换像这样的对象
public static class ObjectExtensions
{
public static Nullable<T> ToNullable<T>(this object input)
where T : struct
{
if (input == null)
return null;
if (input is Nullable<T> || input is T)
return (Nullable<T>)input;
throw new InvalidCastException();
}
}
用法:
object value = 123.45m;
decimal? dec = value.ToNullable<decimal>();
以上不适用于字符串,是否可以定义上述方法的伴侣来专门处理字符串?
特别喜欢我想做的事情: -
object v1 = 123.45m;
decimal? d1 = v1.ToNullable<decimal>();
object v2 = "123.45";
decimal? d2 = v2.ToNullable<decimal>();
答案 0 :(得分:3)
一个简单的扩展方法将字符串转换为十进制。当然不是空字符串
public static class StringExtensions
{
public static decimal? ToNullableDecimal(this string s)
{
decimal value;
if (!Decimal.TryParse(s, out value)
return null;
return value;
}
}
答案 1 :(得分:2)
你可以这样做:
string nds = null;
decimal? d = (nds != null) ? Convert.ToDecimal(nds) : default(decimal?);
答案 2 :(得分:2)
鉴于你的扩展功能,为什么不能这样:
public static class ObjectExtensions
{
public static Nullable<T> ToNullable<T>(this object input)
where T : struct
{
if (input == null)
return null;
if (input is Nullable<T> || input is T)
return (Nullable<T>)input;
else if (input is string)
return (T)Convert.ChangeType(input, typeof(T));
throw new InvalidCastException();
}
}
它适用于数字类型(由ChangeType支持),甚至是Dates等。
当然,&#34;输入&#34;必须可转换为所需类型(谨防特定于文化的约束)。
为了改善这一点,您可以传递给&#34; ChangeType&#34; (在第三个参数)您要使用的文化,例如return ((T)Convert.ChangeType(input, typeof(T), new CultureInfo("en-US")));
您还可以在此方法中添加内容以处理异常等
答案 3 :(得分:0)
这对我有用吗
1-在类中创建以下方法(ex ValidationHelper)
public static decimal? Todecimal(string s,decimal defValue=0)
{
if (s.Trim()!="")
{
return Convert.ToDecimal(s);
}
else
{
return defValue;
}
}
然后你可以在你的应用中的任何地方使用它
prod.Qty = ValidationHelper.Todecimal(txtQty.Text,1);//ex: assuming the default value for Qty is 1.
希望这会对某人有所帮助。感谢