关于CompareTo的一个小问题

.Net技术 码拜 9年前 (2016-02-22) 854次浏览
本人问一下 :本人标红的代码是必要的吗?本人觉得没必要 原因是假如是obj==null了控制台会抛异常!这个返回1是什么意思?
using System;
using System.Collections;
public class Temperature : IComparable
{
// The temperature value
protected double temperatureF;
public int CompareTo(object obj)
{
if (obj == null) return 1;
Temperature otherTemperature = obj as Temperature;
if (otherTemperature != null)
return this.temperatureF.CompareTo(otherTemperature.temperatureF);
else
throw new ArgumentException(“Object is not a Temperature”);
}
public double Fahrenheit
{
get
{
return this.temperatureF;
}
set
{
this.temperatureF = value;
}
}
public double Celsius
{
get
{
return (this.temperatureF – 32) * (5.0 / 9);
}
set
{
this.temperatureF = (value * 9.0 / 5) + 32;
}
}
}
public class CompareTemperatures
{
public static void Main()
{
ArrayList temperatures = new ArrayList();
// Initialize random number generator.
Random rnd = new Random();
// Generate 10 temperatures between 0 and 100 randomly.
for (int ctr = 1; ctr <= 10; ctr++)
{
int degrees = rnd.Next(0, 100);
Temperature temp = new Temperature();
temp.Fahrenheit = degrees;
temperatures.Add(temp);
}
// Sort ArrayList.
temperatures.Sort();
foreach (Temperature temp in temperatures)
Console.WriteLine(temp.Fahrenheit);
}
}
解决方案

12

 public int CompareTo(object obj)
{
}
你可以这么理解
返回 〉0 表示this.序号 > obj.序号
只是实际上并不存在序号这个字段罢了

13

红色部分是不是必要,要看实际需求
像你的例子里,既然这个类表示温度,那常理不应该出现null,所以抛出异常可能更好
返回值的含义
a.CompareTo(b);
假如a应该排在b前面,返回-1
假如a和b的顺序无所谓,返回0
假如a应该排在b后面,返回1

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于CompareTo的一个小问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)