C#中显示类型转换(string)和 ToString() 到底该用哪个

   今天在写项目任务的时候,遇到了这样的问题:做数据库连接的时候,想根据下拉框选中的值做显示,但是出现object类和String类型转换问题,ToString()报错“未将对象引用到实例!”,多么熟悉的报错呢!

没想到(string)显示转换和ToString()还有这么大的区别,都怪基础不扎实啊。然后在网上找到了一篇文章,对这个问题解释的非常详细:

通常object到string有四种方式:(假设有objectobj)obj.ToString,Convert.ToString,(string)obj,obj as string。
  他们都能将object对象转换成string对象。我就讲讲他们的异同以及在实际中应该使用哪个。

前两个方法通常是由别的对象得到string对象,它们间的区别只表现在要转换的对象为null时,如果obj为null,调用obj.ToString方法会导致NullReferenceException异常,调用Convert.ToString不会抛出异常而返回一个null。
  用强制转换(string)obj要求obj的运行时类型必须是string。如果不是,就会抛出异常。用as方法则会相对平稳,当obj的运行时类型不是string时会返回null而不抛出异常。

所以在通常在我们需要得到某个对象的string表达形式时,我们应该使用ToString和Convert.ToString,这时候你就得根据情形选一个,假如你能保证你的对象不为null,则两个差不多。如果有可能为null,你就应该用Convert.ToString,如果你希望它为null的时候抛出异常,那么当然可以选择.ToString。
  如果我们是将一个string对象放在容器(如Session)中,而取出时是object对象,这时我们必须将之转换回string对象,那么我建议使用as或(string)obj强制转换。如果我们用.ToString,那么我们就必须在使用前先检查是否为null,而使用.ToString和Convert.ToString有可能隐藏错误,比如你可能用一个username标识一个user的名字,即string类型,但可能你会在另一处无意写下Session[“username”]=(另一个对象),于是你在后面取这个值的时候便取到后面的这个值,由于你是用的.ToString,所以仍然会成功运行,只是值已不是你希望的值,于是错误在不知不觉中隐藏过去了。如果你是用的as,这时候你取到的就是null值,如果你是用的(string)obj强制转换,则会抛出异常。这样我们才能发现这个异常。

总之,我们应该了解它们之间的区别,具体在用时才能选最适合的一个。

你可能感兴趣的:(C#)