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

7

哪个更好

var s =  (string)reader[0]  

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

?


为什么不把reader[0].ToString()作为一个选项呢? - Oded
3
你能定义“更好”吗?更快?更健壮?更易读?更小的内存占用? - Fredrik Mörk
9个回答

7

我会说 reader.GetString(0)


2
在.NETFX 2的版本中,我进行了大量的研究,并发现使用带有索引查找的Get<T>方法是所有读取方法中性能最好的。 - keithwarren7
我还在3.5中进行了测量,发现这比(string)reader[0]的性能明显更好。 - mqp
reader.GetString(0) 读取 blob 值(例如 Varchar(Max))时是否存在问题? - Brettski

6
为什么没有人考虑可读性和可维护性呢?
我知道作者在询问:
var s =  (string)reader[0]      
or    
var s = Convert.ToString(reader[0])

但是关于这个:

string s = reader["Fieldname"].ToString(); 

如果您交换/删除/添加列并且索引正在更改,那么这将变得更易读和更安全...这肯定更值得。

有人说硬转换速度快30%。好吧,1毫秒的30%是1,333毫秒?肯定不是整个数据获取的30%。


这个答案应该被遵守。 - jason

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])

所以,选择应该考虑上下文。

1
在考虑代码的可读性和意图时,应该给予加分,而不仅仅是性能。 - rob

3
var s =  (string)reader[0]  

如果无法转换为字符串,它会给您一个类转换异常,而

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

如果不能转换,它会更加优雅地处理,并且您将获得null。这也将处理更多类型的reader [0]对象,因为其他方法仅允许可以转换为字符串的类型进行强制转换,而此方法将支持Convert类可以处理的任何类型。我认为这更多。但可能不是...


3

这个更快,根据我的测试大约快了30%:

var s =  (string)reader[0];

然而,当它为空时,这不会崩溃:

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

3
如果reader[0]实际上是一个字符串,那么就用(string)reader[0]。这样更清晰,而且很可能更快(除非编译器做了我不知道的某些神奇优化)。

1

那么reader.GetString(0);怎么样?


0

怎么样?

reader[0].ToString();


-1

我会选择

reader[0].ToString();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接