65.9K
CodeProject 正在变化。 阅读更多。
Home

转换和解析很好,但如果需要转换为可空类型怎么办?

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.14/5 (6投票s)

2007年11月1日

CPOL

2分钟阅读

viewsIcon

27384

downloadIcon

129

一个用于将原始类型转换为其可空对应项的类。

引言

一个简单的 static 类,用于帮助将原始类型转换为其 .NET 2.0 可空对应类型。

背景

“可空类型解决了你希望能够拥有具有 null (或未知)值的原始类型的情况。这在数据库场景中很常见,但在其他情况下也很有用。” -- Eric Gunnerson

在我的最后一个 Web 项目中,我发现自己需要进行大量的 string 和其他原始类型转换为可空类型,原因有很多。我做了很多检查,并且决定将所有这些抽象到一个类中。因此,ConvertNullable 类诞生了。

Using the Code

如果您从未见过 .NET 2.0 可空类型,它们非常易于使用。使用可空类型的语法如下

int? x = 125;
if (x != null) {...}

ConvertNullable 类是 static 的,因此您应该能够将其直接放入项目的 appCode 目录中并立即看到其效果。我包含了以下类型的转换方法

  • 字节型?
  • bool?
  • DateTime?
  • Decimal?
  • 双精度浮点型?
  • Int16?
  • Int32?
  • Int64?
  • SByte?
  • Single?
  • UInt16?
  • UInt32?
  • UInt64?

以下是如何从其中一个方法进行转换的示例

/// <summary>
/// Converts the System.String representation of a number in a 
/// specified base to an equivalent 32-bit signed integer, or null.
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public static Int32? ToInt32(object value)
{
    Int32 returnValue;
    if (Int32.TryParse(value.ToString(), out returnValue))
    {
        return returnValue;
    }
    else
    {
        return null;
    }
}

所有方法都使用原始类型的 TryParse 方法。TryParse 方法将 string 和原始类型输出参数作为其参数。它尝试进行解析并返回一个 true false 值,以指示解析是否成功。如果解析成功,它还会将成功转换的项目返回给你。如果值为 false ,表示无法转换该值,则返回 null - 因此 - ConvertNullable

关注点

我需要注意的一件事是 DateTime 类型。如果您将 null 传递给 DateTime TryParse - 它实际上会成功并返回 01/01/0001 的日期,这绝对不是预期的行为。因此,在 ConvertNullable.ToDateTime 方法中,我首先需要检查是否传递了 null 值,然后再尝试转换。

希望这能帮助到有人 - 谢谢!

历史

  • 2007/11/01 - 首次提交
© . All rights reserved.