(string)reader [0] vs Convert.ToString(reader [0])

时间:2010-02-15 14:09:01

标签: c# ado.net sqldatareader

什么更好

var s =  (string)reader[0]  

var s = Convert.ToString(reader[0])

10 个答案:

答案 0 :(得分:7)

我会说reader.GetString(0)

答案 1 :(得分:4)

// Conveys that you are sure that reader[0] is a string and 
// if it's not you probably have bigger problems 
// than the resulting exception
var s =  (string)reader[0];

// Conveys that you are hoping that reader[0] is convertible to a string
var s = Convert.ToString(reader[0])

所以这可能是选择考虑上下文的​​问题。

答案 2 :(得分:4)

为什么没有人考虑过可读性和可维护性?

我知道作者问:

var s =  (string)reader[0]      
or    
var s = Convert.ToString(reader[0])

但是怎么样:

string s = reader["Fieldname"].ToString(); 
如果您交换/删除/添加列并且索引正在改变,那么更具可读性和安全性......这肯定更值得。

一个人说硬拼命要快30%。 1 ms的30%是1,333 ms?肯定不是整个数据获取的30%。

答案 3 :(得分:2)

如果reader [0]实际上是一个字符串,那么(string)reader[0]

它更清晰,最有可能更快(除非编译器做了一些我不知道的神奇优化)。

答案 4 :(得分:2)

var s =  (string)reader[0]  
如果无法将其转换为字符串,

将为您提供类强制转换异常,而

var s = Convert.ToString(reader[0])

将更优雅地处理它,如果无法转换,您将获得null。这也将为reader [0]处理更多类型的对象,因为另一种方法只允许将类型转换为字符串的转换,而这将支持转换类可以处理的任何类型。我认为更多。但可能不是......

答案 5 :(得分:2)

在我的测试中,这个更快,大约快〜30%

var s =  (string)reader[0];

然而,当它为空时,它不会爆炸:

var s = Convert.ToString(reader[0]);

答案 6 :(得分:2)

reader.GetString(0);怎么样?

答案 7 :(得分:1)

我猜是reader[0].ToString();

答案 8 :(得分:1)

怎么样

  

读取器[0]的ToString();

答案 9 :(得分:0)

我会选择

reader[0].ToString();