Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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# 用于重载运算符的自定义字符串实现<&书信电报;及>&燃气轮机;用于c中字符串的二进制移位#_C#_String_Overloading_Operator Keyword - Fatal编程技术网

C# 用于重载运算符的自定义字符串实现<&书信电报;及>&燃气轮机;用于c中字符串的二进制移位#

C# 用于重载运算符的自定义字符串实现<&书信电报;及>&燃气轮机;用于c中字符串的二进制移位#,c#,string,overloading,operator-keyword,C#,String,Overloading,Operator Keyword,我想知道如何在c#中实现MyString类并重载操作符。 例如: MyString name = "string"; Console.Write(name<<3) // It will print **ingstr** by shifting last 3 to left MyString name=“string”; Console.Write(name如果我真的需要它,我会写一些如下的内容: public static string operator << (My

我想知道如何在c#中实现MyString类并重载操作符
。 例如:

MyString name = "string";

Console.Write(name<<3) // It will print **ingstr** by shifting last 3 to left
MyString name=“string”;

Console.Write(name如果我真的需要它,我会写一些如下的内容:

public static string operator << (MyString s, int shift)
{
    if(shift <= 0)
    {
        return s;
    }

    shift = shift % s.Length;
    return s.String.Substring(shift, s.Length - shift)
         + s.String.Substring(0, shift);
}

如果我真的需要它,我会写一些大致如下的内容:

public static string operator << (MyString s, int shift)
{
    if(shift <= 0)
    {
        return s;
    }

    shift = shift % s.Length;
    return s.String.Substring(shift, s.Length - shift)
         + s.String.Substring(0, shift);
}


首先,我不鼓励您从一开始就这样做-但是您尝试过了吗?有多远?您遇到了什么问题?不要把它放在评论中-编辑您的问题。请阅读,您现在已经展示了您的实现-在尝试实现移位运算符时出现了什么问题?您清楚地知道如何使运算符过载正如您为
==
!=
所做的那样(尽管您没有覆盖Equals和GetHashCode有点奇怪)那么,什么是错误的<代码> @ JunSwitt我不知道如何实现逻辑>,没有问题的= =和!= =当他们工作的时候,请考虑将答案标记为接受。首先,我劝阻你这样做,以开始-但你尝试了吗?你有多远?你遇到什么问题?不要把它放在COMM中。ents-编辑您的问题。请阅读,以便您现在已经展示了到目前为止的实现-在尝试实现移位运算符时出现了什么问题?您显然知道如何重载运算符,因为您正在为
=
!=
(尽管您没有重写Equals和GetHashCode有点奇怪)所以,<>代码> @ Jon Skutt出了什么问题,我不知道如何实现逻辑>,没有问题,因为它们是工作完成的,请考虑把答案标记为接受。我建议做移位%s。长度,而不是扔IAE。也检查零,返回原来的字符串。首先你应该%,然后只检查ZER。o、 如果是负数,则用正数移位调用>>。我如上所述更新了代码,在测试@MikeHermann时,为什么会出现“anNaum”?如果初始文本是“Nauman”,并且我们将两个字符向左移位,我会出现“Umana”。我建议执行移位%s。长度而不是抛出IAE。还将检查零,以返回原始字符串。首先应检查%,然后才检查零。如果为负,则使用正移位调用>>。我如上所述更新了代码,并且在测试@MikeHermann时,如果初始文本为“Nauman”,为什么预期为“anNaum”我们向左移动两个字符,我希望是“Umana”。
string str = "name".ShiftLeft(2);