7

什么更好

var s =  (string)reader[0]  

或者

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

?

4

10 回答 10

7

我会说reader.GetString(0)

于 2010-02-15T14:13:00.573 回答
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])

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

于 2010-02-15T14:20:22.810 回答
4

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

我知道作者问的是:

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

但是关于:

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

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

一个人说硬演员要快 30%。那么 1 毫秒的 30% 是 1,333 毫秒?肯定不是整个数据获取的 30%。

于 2010-10-27T18:48:28.010 回答
2

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

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

于 2010-02-15T14:10:24.077 回答
2
var s =  (string)reader[0]  

如果不能将其转换为字符串,则会给您一个类转换异常,而

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

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

于 2010-02-15T14:12:32.520 回答
2

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

var s =  (string)reader[0];

但是,当它为空时,它不会爆炸:

var s = Convert.ToString(reader[0]);
于 2010-02-15T14:14:02.907 回答
2

怎么样reader.GetString(0);

于 2010-02-15T14:15:06.077 回答
1

我猜reader[0].ToString();

于 2010-02-15T14:10:09.450 回答
1

关于什么

阅读器[0].ToString();

于 2010-02-15T14:12:13.810 回答
0

我会去

reader[0].ToString();
于 2010-02-15T14:22:40.463 回答