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






4.14/5 (6投票s)
一个用于将原始类型转换为其可空对应项的类。
引言
一个简单的 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 - 首次提交