c#如何使用CompareTo在课堂上比较字符串?
抱歉之前的文章,所以我会把我的班级代码c#如何使用CompareTo在课堂上比较字符串?,c#,C#,抱歉之前的文章,所以我会把我的班级代码 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(st
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());
}
}
}
但是它给了我一个错误,所以我需要帮助。顺便说一下,名字是用我的立陶宛语命名的,我会让你更好地理解
纳里斯-成员
瓦尔达斯-名字
帕瓦德-姓氏
GimimoData-出生日期
因此,我需要先按姓氏排序,然后按姓氏排序(如果2的姓氏相同)。请看一看说明CompareTo()结果的
小于零此实例位于值之前
零此实例具有
排序顺序中与值相同的位置
大于零此实例跟随值-or-值为空
所以你必须更换
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!
}
publicstaticbool操作符=(naryslhs,narysrhs)
{
return(lhs.Pavarde.CompareTo()>=rhs.Pavarde.CompareTo());//此处语法错误!
}
与
公共静态布尔运算符=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
。没有必要为此而重载操作符。它是这样的:lhs.CompareTo(rhs)代码>。如果lhs较小,则返回负值;如果lhs较大,则返回正值;如果lhs相等,则返回零。为什么要重载=
和
和
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;
}
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");
}
}
}