很抱歉,以前的帖子,所以我将放置我的课程代码。
using System;
namespace U3_13
{
abstract class Narys
{
public string Vardas { get; set; }
public string Pavarde { get; set; }
public DateTime GimimoData { get; set; }
public Narys()
{
}
public Narys(string vardas, string pavarde, DateTime gimimodata)
{
Vardas = vardas;
Pavarde = pavarde;
GimimoData = gimimodata;
}
public override bool Equals(object obj)
{
return this.Equals(obj as Narys);
}
public bool Equals(Narys narys)
{
if (Object.ReferenceEquals(narys, null))
{
return false;
}
if (this.GetType() != narys.GetType())
{
return false;
}
return (Vardas == narys.Vardas) && (Pavarde == narys.Pavarde);
}
public override int GetHashCode()
{
return Vardas.GetHashCode() ^ Pavarde.GetHashCode();
}
public static bool operator ==(Narys lhs, Narys rhs)
{
if (Object.ReferenceEquals(lhs, null))
{
if (Object.ReferenceEquals(rhs, null))
{
return true;
}
return false;
}
return lhs.Equals(rhs);
}
public static bool operator !=(Narys lhs, Narys rhs)
{
return !(lhs == rhs);
}
public static bool operator <=(Narys lhs, Narys rhs)
{
return lhs.Pavarde.CompareTo(rhs.Pavarde);
}
public static bool operator >=(Narys lhs, Narys rhs)
{
return (lhs.Pavarde.CompareTo() >= rhs.Pavarde.CompareTo());
}
}
}
因此,如您所见,在类的结尾,这两个运算符<=和> =被写错了。我需要特别使用CompareTo,因为我的任务需要它,但是我不知道它是如何工作的。有些人说要写:
return lhs.Pavarde.CompareTo(rhs.Pavarde);
但是它给我一个错误,所以我需要帮助。顺便说一下,名字是用我的立陶宛语命名的,我将为您提供更好的理解。
Narys-成员;
Vardas-名字;
Pavarde-姓氏;
GimimoData-生日;
因此,我需要首先按姓氏排序,然后按姓氏排序(如果2具有相同的姓氏)。
答案 0 :(得分:1)
看看documentation,它说明了CompareTo()
的结果
小于零。该实例在 value 之前。
0 (该实例具有 与 value 在排序顺序中的位置相同。
大于零。该实例遵循 value 。 -或- value 为 null 。
所以您必须更换
public static bool operator <=(Narys lhs, Narys rhs)
{
return lhs.Pavarde.CompareTo(rhs.Pavarde); //syntax error here!
}
public static bool operator >=(Narys lhs, Narys rhs)
{
return (lhs.Pavarde.CompareTo() >= rhs.Pavarde.CompareTo()); //syntax error here!
}
使用
public static bool operator <=(Narys lhs, Narys rhs)
{
return lhs.Pavarde.CompareTo(rhs.Pavarde) <= 0;
}
public static bool operator >=(Narys lhs, Narys rhs)
{
return (lhs.Pavarde.CompareTo(rhs.Pavarde)) >= 0;
}
答案 1 :(得分:0)
如果要使用排序方法进行比较,则应实现IComparable。我在两行之间阅读,这就是您想要做的。对不起,如果我误会了。这是您的操作方式:
abstract class Narys: IComparable
{
...
public int CompareTo(object obj)
{
if (obj == null) return 1;
Nardys otherMember = obj as Nardys;
if (otherMember != null)
{
// Check to see if last name is the same
if (this.Pavarde.CompareTo(otherMember.Pavarde)==0)
{
// Compare first names
return this.Vardas.CompareTo(otherMember.Vardas);
}
else
{
// Compare last names
return this.Pavarde.CompareTo(otherMemder.Pavarde);
}
}
else
{
throw new ArgumentException("Object is not a Nardys");
}
}
}
现在您可以对数据执行Array.Sort
或List.Sort
。为此,无需重载运算符。