是否有原因,第二個操作數的類型必須是int?C#移位運算符過載
...
// I would like to do this
public static StringList operator<<(StringList list, string s) {
list.Add(s);
return list;
}
// but only int is supported...
...
編輯: 就肯定......我能重載operator *的GET(例如)字符串
class MyString {
string val;
public MyString(string s) {
val = s;
}
public static List<string> operator*(MyString s, int count) {
List<string> list = new List<string>();
while (count-- > 0) {
list.Add(s.val);
}
return list;
}
}
...
foreach (var s in new MyString("value") * 3) {
s.print(); // object extension (Console.WriteLine)
}
// output:
// value
// value
// value
...
的列表,但不能超載左移,由C衆所周知++ STD(超載爲輸出),因爲它不清楚?當然,這只是C#設計師的決定。 它仍然可以被意想不到的/不明確的(int)重載。
真的是因爲它是一個不明確的代碼?
我要說的卻是C++得到了這個錯誤,C#是正確的。任意運算符重載導致可讀代碼較少。 – tvanfosson
如果bitshift運算符僅在int上有含義,則可能無法重載... –