Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#如何使用CompareTo在课堂上比较字符串?_C# - Fatal编程技术网

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");
        }
    }
}