早在VB6,我写了几个功能,将让我的代码,而不必关心和0号"字符串空之间"的区别,空,等不必添加特殊的情况下,编码时没有杀死我的工作效率更用于处理可能导致某些无关错误的数据的代码; 9999/10000如果我用作数字的东西是空的,那么我真的把它当作0.
我现在在C#和VB6和C#2005之间的差别是相当广泛的,所以,我真的不知道从哪里开始写我的一套新的辅助功能,或者如果我甚至需要做的他们都.
所以,我需要编写将接受一个字符串,数据库字段,申请表/ querysting场,???,然后尽一切可能做到把它转换成一个双,并返回给调用程序的功能.
我还需要为短裤,int16,int32,long,以及其他我可能关心的事情做这件事.
然后我会为字符串做这个.和日期.
这是值得追求的吗?我可以使用框架或C#中的某些东西吗?我真的希望能够在调用其他函数时使用内联数据,而不必创建临时变量等.
内置了大量的转换功能.但是......我不确定他们中的任何一个是否完全符合你的要求.通常,.NET方法在传递无效输入时会小心谨慎,并抛出异常.
幸运的是,您可以轻松编写实用程序方法,将数值的字符串表示形式,空字符串空或空字符串转换为任何输出类型:
public static T SafeConvert(string s, T defaultValue) { if ( string.IsNullOrEmpty(s) ) return defaultValue; return (T)Convert.ChangeType(s, typeof(T)); }
使用:
SafeConvert(null, 0.0) == 0.0; SafeConvert("", 0.0) == 0.0; SafeConvert("0", 0.0) == 0.0;
此泛型方法从第二个参数的类型获取其返回类型,当传递的字符串为null或为空时,该类型将用作默认值.通过0
,你会得到In32
回来.通过0L
,Int64
.等等...
在C#中,大多数数据类型都不可为空(数字,日期等),只有字符串是空的.如果你从数据库中获取数据,那么你很可能会使用Nullable,或者它的语法加糖版本,int?,double?,DateTime?等.
所有nullables都有一个允许您获取其实际值的方法,或者如果它们为null则为默认值.这可以帮助您避免创建这些功能.
至于字符串,你有String.IsNullOrEmpty(str)函数.
如果您想要一些特殊的不可用功能,也可以添加扩展方法.请注意,只要在代码中处理扩展方法,就可以将扩展方法应用于空值.例如:
public static string ValueOrDefault(this string str) { if (String.IsNullOrEmpty(str)) return MY_DEFAULT_VALUE; else return str; }