日期:2014-05-20  浏览次数:20768 次

关于对象实例.ToString()的问题
在好多位同行的.NET代码中我总是很多的发现ToString()的使用.比如  
int   i=1234;   string   str=i.ToString();
DateTime   dt=DateTime.Now;   string   str=dt.ToString();
因为我们要得到值的一个字符串的表示就这么用了.比如用来显示这个值,这很正常.

可是下在的这几种情况为什么使用呢:
int   i=123;
int   j=123;
if   (i.ToStirng()==j.ToString())
{
          //i和j是相等的
}
--------
DateTime   dt1=DateTime.Today;
DateTime   dt2=DateTime.Today;
if   (dt1.ToString()==dt2.ToString())
{
          //dt1和dt2是相等的;
}
等等这种情况吧,
我就不理解了,为什么一个整数的比较,或一个时间类型的比较,或其它一个明确类型的值的比较,什么都一定要把它们ToString()了再比较呢?
我知道一个类型如果有IConvertible,   IComparable,   IEquatable等的实现,这样我们总可以通过CompareTo方法,Equals方法,或用==, <=,!=,> =来比较,当然也可以ToString()后通过字符串来比较.
那么哪一个更合适或更实用请大家说说自已的说法吧.
也说说有这种类似情况的时候,你是如何来使用的?
请大家积极的发言:)

------解决方案--------------------
这是谁写的代码??

------解决方案--------------------
int i=123;
int j=123;
if (i ==j)
{
//i和j是相等的
}
DateTime dt1=DateTime.Today;
DateTime dt2=DateTime.Today;
if (dt1==dt2)
{
//dt1和dt2是相等的;
}

是可以的啊,类型一样就可以啊。
------解决方案--------------------
先占个座..
------解决方案--------------------
我个人认为只要类型相匹配就应该没有问题,至于哪个速度快,我认为还是原形快。
------解决方案--------------------
CompareTo方法,Equals方法,或用==, <=,!=,> =

习惯优先使用==后Equals,最后CompareTo

至少不会把能使用这些比较的转化为string再比较
------解决方案--------------------
貌似自己也这样写过!~~~
------解决方案--------------------
如果类型相同的话,我一般是用两个变量直接比较的,你上面所说的情况,个人感觉不是好的方法
------解决方案--------------------
垃圾代码而已~
------解决方案--------------------
两个变量进行比较时,一般只要类型相同的情况下,我都是直接进行比较的。
感觉LZ列出来的那种写法有点多此一举。
------解决方案--------------------
值类型直接比较是毫无疑问的

DateTime比较特殊,它是个结构(而不是对象)
比较两个结构是否相等要分具体情况

比如Color,两个表示同样颜色的Color,直接比较可能并不相等
因为可能有不相等的字段,比如Name
可以ToArgb得到数字进行比较
DateTime可以用Compare或CopareTo方法

一般都可以用Equals方法

------解决方案--------------------
//两个变量进行比较时,一般只要类型相同的情况下,我都是直接进行比较的。
你自己构造一个红色Color,直接与Color.Red用==比较,是不相等的
------解决方案--------------------
完全没那个必要啊。


------解决方案--------------------
对于.Net框架中的一些核心类型,比如bool,int等,两种方式基本差不多...

ToString()方法,默认情况下方法返回的是类型的全名(this.GetType().FullName.ToString()),还有一种常见的做法就是重写该方法使其返回一个表示对象状态的字符串..int和bool等一些核心类型就是重写了这个方法,所以才能返回他们值所对应的字符串...
------解决方案--------------------
所有比较两个变量,用ToString的方法也只能对这些基本类型可以用(但其实没那个必要)..

正确的做法还是 "Equals方法,或用==, <=,!=,> = "诸如此类的方法..
------解决方案--------------------
不仅资源开销的问题,还有可能是错的
还举Color的例子,Color.ToString()得到的可能是名称(如果有的话),也可能是ARGB分量组成的字符串
------解决方案--------------------
TO:还举Color的例子,Color.ToString()得到的可能是名称(如果有的话),也可能是ARGB分量组成的字符串