DataReader[0].ToString()
和(string)DataReader[0]
之间是否存在差异?
我的猜测是,如果数据库类型不是字符串类型,(string)DataReader[0]
可能会失败,其中DataReader[0].ToString()
只会将DB null之外的任何内容转换为字符串。是这样的吗?
哪个更快?
答案 0 :(得分:2)
这两个都向您介绍潜在的数据异常,IMO从阅读器读取的最佳方式是:
var x = reader[0] as string
然后对于数字/布尔等我总是使用可空类型,所以你可以得到
var y = reader[1] as int?
现在如果你出于某种原因完全反对nullables(我认为他们很高兴知道是否设置了某些东西)
int i = (reader[1] as int?).GetValueOrDefault()
答案 1 :(得分:0)
(string)DataReader [0]是类型转换。编译器将在编译时插入一些指令集,这些指令需要执行才能执行转换,并在未能执行转换时抛出异常。
DataReader [0] .tostring()是函数调用,它在运行时被解析,没有异常。
如果我错了,专家请纠正我。
答案 2 :(得分:0)
我知道对这个问题发表评论为时已晚,但我认为很多人对(string)object
和object.ToString()
有类似疑问,这个问题是正确评论的地方。
当确定对象的类型是字符串时,最好做typecasting
而不是调用方法.ToString()
。如果您查看ToString()
的代码:
public virtual string ToString()
{
return this.GetType().ToString();
}
首先通过调用GetType()
方法然后调用该类型的ToString()
来查找对象类型。
如果我们不确定object
的类型,那么答案就是ToString()
而不是(string)
。
如果您想查看(字符串)vs .ToString()的性能基准,请点击以下链接:(string) vs .ToString()