什么更好
var s = (string)reader[0]
或者
var s = Convert.ToString(reader[0])
?
我会说reader.GetString(0)
// 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])
所以这可能是一个考虑上下文的选择问题。
为什么没有人考虑可读性和可维护性?
我知道作者问的是:
var s = (string)reader[0]
or
var s = Convert.ToString(reader[0])
但是关于:
string s = reader["Fieldname"].ToString();
如果您交换/删除/添加列并且索引正在更改,那将更具可读性和安全性……这肯定更值得。
一个人说硬演员要快 30%。那么 1 毫秒的 30% 是 1,333 毫秒?肯定不是整个数据获取的 30%。
如果 reader[0] 实际上是一个字符串,那么(string)reader[0]
.
它更清晰,而且很可能更快(除非编译器做了一些我不知道的神奇优化)。
var s = (string)reader[0]
如果不能将其转换为字符串,则会给您一个类转换异常,而
var s = Convert.ToString(reader[0])
将更优雅地处理它,如果无法转换,您将获得 null 。这还将为 reader[0] 处理更多类型的对象,因为另一种方法仅允许类型可以转换为字符串的转换,而这将支持 Convert 类可以处理的任何类型。我认为更多。但可能不是...
这更快,在我的测试中大约快30% :
var s = (string)reader[0];
但是,当它为空时,它不会爆炸:
var s = Convert.ToString(reader[0]);
怎么样reader.GetString(0);
?
我猜reader[0].ToString();
关于什么
阅读器[0].ToString();
我会去
reader[0].ToString();