回到VB6,我编写了一些函数,可以让我编写代码而不必关心null和''对于字符串,null和0对于数字等的区别。在编码时没有什么能比我的工作效率更高添加特殊案例代码以处理可能导致某些无关错误的数据; 9999/10000如果我用作数字的东西为空,那么我真的把它当作0。

我现在在C#中,VB6和C#2005之间的区别相当广泛...所以我真的不知道从哪里开始编写我的新辅助函数集,或者我甚至需要做什么他们都是。

所以,我需要编写一个函数来接受一个字符串,一个数据库字段,一个请求表单/ querysting字段,???然后做任何可以做的事情把它变成一个Double,并返回到调用程序。

我还需要为short,int16,int32,long,以及其他我可能关心的事情做这件事。

然后我会为字符串做这个。和日期。

这是值得追求的吗?我可以使用框架或C#中的某些东西吗?我真的希望能够在调用其他函数时使用内联数据,而不必创建临时变量等。

有帮助吗?

解决方案

内置了大量的转换功能。但是......我不确定他们中的任何一个是否完全符合你的要求。通常,.NET方法在传递无效输入时会小心谨慎,并抛出异常。

幸运的是,您可以轻松编写实用程序方法,将数值的字符串表示形式,空字符串空或空字符串转换为任何输出类型:

public static T SafeConvert<T>(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?等。

所有可取的内容都有方法,可让您获取实际值,如果它们为null,则为默认值。这可以帮助您避免创建这些功能。

至于字符串,你有String.IsNullOrEmpty(str)函数。

如果你想要一些特别的话,你也可以添加扩展方法不可用的功能。请注意,只要在代码中处理扩展方法,就可以将扩展方法应用于空值。例如:

public static string ValueOrDefault(this string str) 
{
     if (String.IsNullOrEmpty(str)) return MY_DEFAULT_VALUE;
     else return str;
}

.NET库中有一个名为Convert的类。它具有的功能允许您从任何基本类型和一些常见类(如DateTime)转换为您需要的任何内容。

它基本上像Convert.ToInt32(val);

编辑:我真的需要学习阅读所有的单词。没有担心null ...有一个操作员。你可以用??检查null并提供默认值,以便可以工作。

您可能还想查看LINQ,它会为您处理很多类型的映射。

我认为它类似于@ Shog9。我只是添加一个try catch来处理用户异常输入。我发送我想要转换输入的类型并将输入作为对象。

public static class SafeConverter
{
   public static T SafeConvert<T>(object input, T defaultValue)
   {
       if (input == null)
          return defaultValue; //default(T);

       T result;
       try
       {
           result = (T)Convert.ChangeType(input.ToString(), typeof(T));
       }
       catch
       {
          result = defaultValue; //default(T);
       }
       return result;
   }
} 

现在称他们如下

SafeConverter.SafeConvert<ushort>(null, 0);
SafeConverter.SafeConvert<ushort>("", 0);
SafeConverter.SafeConvert<ushort>("null", 0);
SafeConverter.SafeConvert<ushort>("-1", 0);
SafeConverter.SafeConvert<ushort>("6", 0);
SafeConverter.SafeConvert<ushort>(-1, 0);
SafeConverter.SafeConvert<ushort>(0, 0);
SafeConverter.SafeConvert<ushort>(1, 0);
SafeConverter.SafeConvert<ushort>(9, 0);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top