在好多位同行的.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()后通过字符串来比较.
那么哪一个更合适或更实用请大家说说自已的说法吧.
也说说有这种类似情况的时候,你是如何来使用的?
请大家积极的发言:)

解决方案 »

  1.   

    int i=123;
    int j=123;
    if (i ==j)
    {
         //i和j是相等的
    }
    DateTime dt1=DateTime.Today;
    DateTime dt2=DateTime.Today;
    if (dt1==dt2)
    {
         //dt1和dt2是相等的;
    }是可以的啊,类型一样就可以啊。
      

  2.   

    CompareTo方法,Equals方法,或用==,<=,!=,>=习惯优先使用==后Equals,最后CompareTo至少不会把能使用这些比较的转化为string再比较
      

  3.   

    值类型直接比较是毫无疑问的DateTime比较特殊,它是个结构(而不是对象)
    比较两个结构是否相等要分具体情况比如Color,两个表示同样颜色的Color,直接比较可能并不相等
    因为可能有不相等的字段,比如Name
    可以ToArgb得到数字进行比较
    DateTime可以用Compare或CopareTo方法一般都可以用Equals方法
      

  4.   

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

  5.   

    对于.Net框架中的一些核心类型,比如bool,int等,两种方式基本差不多...ToString()方法,默认情况下方法返回的是类型的全名(this.GetType().FullName.ToString()),还有一种常见的做法就是重写该方法使其返回一个表示对象状态的字符串..int和bool等一些核心类型就是重写了这个方法,所以才能返回他们值所对应的字符串...
      

  6.   

    我只是想提醒一下能不用ToString()的最好不用ToString(),因为这也是一个资源开销.
    起码我是注意这种情况的,不是不得已不用ToString()来比较.
      

  7.   

    所有比较两个变量,用ToString的方法也只能对这些基本类型可以用(但其实没那个必要)..正确的做法还是"Equals方法,或用==,<=,!=,>="诸如此类的方法..
      

  8.   

    不仅资源开销的问题,还有可能是错的
    还举Color的例子,Color.ToString()得到的可能是名称(如果有的话),也可能是ARGB分量组成的字符串
      

  9.   

    TO:还举Color的例子,Color.ToString()得到的可能是名称(如果有的话),也可能是ARGB分量组成的字符串同意viena(维也纳nn-下潜15米,潜望镜升起)MM ..是的,想得到值,可以重写一下ToString方法..但如果是为了作比较,为免有点多此一举了..呵呵..
      

  10.   

    TO:我只是想提醒一下能不用ToString()的最好不用ToString(),因为这也是一个资源开销.
    起码我是注意这种情况的,不是不得已不用ToString()来比较.楼主的本意大家当然明白...^_^
      

  11.   

    实在不行重载 ==运算符 
    toString实在非明智之举啊
      

  12.   

    类型一样就可以比较,没有必要非转换成string 类型
      

  13.   

    TO:我只是想提醒一下能不用ToString()的最好不用ToString(),因为这也是一个资源开销.
    起码我是注意这种情况的,不是不得已不用ToString()来比较.我也是逼不得已才用tostring来比较的,能少用就用吧,资源开销
      

  14.   

    这就结贴,多谢大家参与本贴对ToString()的讨论.