var item = "" + dr["someString"];
或者
var item = Convert.ToString(dr["somestring"]);
以上示例的性能影响是什么?
var item = "" + dr["someString"];
或者
var item = Convert.ToString(dr["somestring"]);
var item = (string)dr["someString"] ?? "";
这种方法避免了不必要的字符串拼接、虚函数调用以及避免了在空引用上调用方法的风险。在这个上下文中,dr
的含义不太清楚;如果它是一个数据读取器(例如 IDataReader
),你可能需要:
int index = dr.GetOrdinal("someString");
var item = dr.IsDBNull(index) ? "" : dr.GetString(index);
或者在 DataTable
的情况下,涉及到 DataRow.IsNull
。
dr["someString"].ValueOrEmpty()
有什么问题吗?
至于您最初的问题,性能不会有影响。我向您保证,有几个其他可以优化的领域可以获得更好的性能增益。
编写最易读的代码。在被证明需要优化之前,请勿进行优化。
更新:
public static class StringExtensions
{
public static string ValueOrEmpty(this object obj)
{
return obj == null ? "" : obj.ToString();
}
}
dr
是一个DataRow,那么dr["someThing"]会返回DBNull而不是null吗? - zmbqdr
是什么,问题中并不清楚。我其实想知道它是否是“数据读取器”,并且在我的答案中画了类似的东西。 - Marc Gravell
DBNull
,但在DataRow
的上下文中,你可以使用dr.IsNull(...)
。这不会改变答案,但是一些相关注释可能会让你感兴趣。 - Marc Gravelldr
的定义非常重要,因此在问题中自愿提供这些信息会很有用;p - Marc Gravellnull
,而是DbNull
,这需要更多的工作。 - Marc Gravell