есть ли причина, по которой тип второго операнда должен быть int?
...
// I would like to do this
public static StringList operator<<(StringList list, string s) {
list.Add(s);
return list;
}
// but only int is supported...
...
РЕДАКТИРОВАТЬ: Просто точно ... Я могу перегрузить оператор * для получения (например) Список строки
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).
Неужели причина в том, что он был сделан нечетким кодом?