MyString类中的c#重写运算符返回相同的对象

时间:2018-02-14 15:32:40

标签: c# string override

我想覆盖 - MyString类的运算符。它应该在字符串中找到最短的单词。这是代码:

class MyString
{
    private string data;
    public string Data
    {
        get { return data; }
        set { data = value; }
    }

    public MyString(string s)
    {
        Data = s;
    }

    public MyString(MyString s)
    {
        Data = s.Data;
    }

    public static MyString operator --(MyString s)
    {
        var words = s.Data.Split();
        int l = 99999, ind = 0;
        for (int i = 0; i < words.Length; i++)
        {
            if (words[i].Length < l)
            {
                ind = i;
                l = words[i].Length;
            }
        }
        MyString result = new MyString(words[ind]);
        return result;
    }
}

当我尝试使用它时:

    MyString s1, shortest;
    s1 = new MyString("one two three");
    shortest = s1--;
    Console.WriteLine(shortest.Data);

它返回“一二三”而不是“一”。我该如何解决?

1 个答案:

答案 0 :(得分:3)

var x = foo--;

发布 -decrement,即类似于:

var x = foo;
foo--;

可能希望预先 - 减少,即

var x = --foo;

类似于:

foo--;
var x = foo;

无论哪种方式:它都会不恰当地更改foo,这可能是您不想要的。如果你这样做:

shortest = --s1;
Console.WriteLine(shortest.Data);
Console.WriteLine(s1.Data);

您现在看到s1.Data <{1}}。

我建议改为:

"one"