【发布时间】:2009-10-09 13:25:42
【问题描述】:
我很好奇在 .NET 中转换内置类型的“正确”方法是什么。目前我使用Convert.To[type]([variable]) 没有任何空值检查或任何东西。最好的方法是什么?
【问题讨论】:
我很好奇在 .NET 中转换内置类型的“正确”方法是什么。目前我使用Convert.To[type]([variable]) 没有任何空值检查或任何东西。最好的方法是什么?
【问题讨论】:
许多类型都有可以使用的 TryParse 方法。例如:
string input = null;
bool result;
Boolean.TryParse(input, out result);
// result ...
上面是有效的,当要解析的输入为空时不会抛出异常。
在将项目转换为字符串时,您几乎总是可以依赖对对象调用 ToString() 方法。但是,在 null 对象上调用它会引发异常。
StringBuilder sb = new StringBuilder();
Console.WriteLine(sb.ToString()); // valid, returns String.Empty
StringBuilder sb = null;
Console.WriteLine(sb.ToString()); // invalid, throws a NullReferenceException
一个例外是在可空类型上调用 ToString(),它也会返回 String.Empty。
int? x = null;
Console.WriteLine(x.ToString()); // no exception thrown
因此,调用 ToString 时要小心;根据对象,您可能必须明确检查 null。
【讨论】:
看到这个link。
在大多数情况下,演员表说“这 A 类型的对象实际上是一个对象 B型-衍生自-A" Convert.To*() 函数说这个 对象不是 B 型,但有 有一种方法可以转换为 B 型”
【讨论】:
某些类型,例如int (Int32) 具有TryParse 方法。
如果存在这样的方法,我会尝试使用它。
否则,我会按照您的概述进行空值检查,然后几乎是 Convert.To。
不确定是否有“正确”的方式,就像大多数任务一样,它是上下文相关的。
善良,
丹
【讨论】:
视情况而定。我最好的建议是学习并熟悉,这样您就可以自己做出更好的选择,但您可能应该先研究以下内容
System.Int32.TryParse()
(大多数基本类型都有等价物)
DateTime.ParseExact()
【讨论】: