C# (字符串)读取器[0]和读取器[0]之间的差异。ToString()
C# (字符串)读取器[0]和读取器[0]之间的差异。ToString(),c#,tostring,datareader,C#,Tostring,Datareader,DataReader[0].ToString()和(string)DataReader[0]之间有区别吗 我的猜测是,如果数据库类型不是字符串类型,则(string)DataReader[0]可能会失败,其中DataReader[0]。ToString()只会将DB null之外的任何内容转换为字符串。是这样吗 哪一种更快?这两种方法都会向您介绍潜在的数据异常,在我看来,从读卡器读取数据的最佳方式是: var x=reader[0]作为字符串 然后对于数字/布尔值等,我总是使用可空类型,这样您就
DataReader[0].ToString()
和(string)DataReader[0]
之间有区别吗
我的猜测是,如果数据库类型不是字符串类型,则
(string)DataReader[0]
可能会失败,其中DataReader[0]。ToString()
只会将DB null之外的任何内容转换为字符串。是这样吗
哪一种更快?这两种方法都会向您介绍潜在的数据异常,在我看来,从读卡器读取数据的最佳方式是:
var x=reader[0]作为字符串
然后对于数字/布尔值等,我总是使用可空类型,这样您就可以
var y=读卡器[1]为int?
现在,如果您出于某种原因完全反对nullables(我认为它们非常适合于知道是否设置了某些内容)
int i=(读卡器[1]作为int?)。GetValueOrDefault()
(字符串)数据读卡器[0]正在进行类型转换。编译器将在编译时插入一些需要执行的指令集,以便执行转换,并在未能执行转换时抛出异常
DataReader[0]。tostring()是在运行时解析的函数调用,没有异常
如果我错了,请专家们纠正我。我知道现在评论这个问题已经太迟了,但我认为许多人对(string)object
和object.ToString()
也有类似的疑问,而这个问题正是评论的正确地方
当确定对象的类型是字符串时,最好执行类型转换
,而不是调用方法.ToString()
。如果查看ToString()
的代码:
public virtual string ToString()
{
return this.GetType().ToString();
}
它首先通过调用GetType()
方法找到对象的类型,然后调用该类型的ToString()
如果我们不确定对象的类型,那么答案将是doToString()
,而不是(string)
如果您想查看(string)与.ToString()的性能基准,请点击链接:作为一点乐趣,我将添加Convert.ToString(DataReader[0])
:-)“将DB null之外的任何内容转换为字符串”实际上,DBNull.Value
确实有一个ToString()
,因为它是一个实际的对象,所以您可以对它调用ToString()
,它可以正常工作。但是如果DB中的DataReader[0]为null,ToString()
会引发异常是我的意思。如果你期望一个字符串值,而你最终得到(比如)一个整数,我宁愿看到异常,也不愿继续像我们真的有一个null
值一样。我同意Jon的观点。了解您的数据。@fearofahackplanetToString()
如果您调用它的对象为null,它将抛出null引用异常。除此之外,它每次都会返回一些东西。(除非你对自定义对象的ToString()
)有一个错误的覆盖)@Chris:然而我宁愿有一个空白页,也不愿用空数据覆盖某人的银行账户。如果出现问题,请尽快中止。继续使用坏数据是一个非常糟糕的主意。@Chris:Wellnull
可能是数据的有效值-但由于架构问题,它不是数据库中的实际值。为什么要忽略模式不正常?从根本上说,我们可以很容易地在这一点上发现错误——为什么要推迟错误处理,并冒着以后无法发现问题的风险?再一次,我坚持认为,在大多数情况下,一旦发现严重错误就立即失败是最好的方法。