Вы не можете изменить str
's __add__
, но вы можете определить, как добавить свой класс в строки. Я не рекомендую это делать.
class MyClass(object):
...
def __add__(self, other):
if isinstance(other, str):
return str(self) + other
...
def __radd__(self, other):
if isinstance(other, str):
return other + str(self)
...
В "asdf" + thing
, если "asdf".__add__
не знает, как обрабатывать добавление, Python пытается thing.__radd__("asdf")
.
var delimitedString = selectedValues.Aggregate((x,y) => x + ", " + y);
Вот пример с StringBuilder
. Хорошая вещь состоит в том что Append()
возвраты StringBuilder
сам экземпляр.
return list.Aggregate( new StringBuilder(),
( sb, s ) =>
( sb.Length == 0 ? sb : sb.Append( ',' ) ).Append( s ) );
var delimitedString = string.Join(",", checkboxList.Items.Where(i => i.Selected).Select(i => i.Value).ToArray());
AviewAnew является лучшим ответом, но если то, что Вы ищете, изучает, как думать в функциональном, что необходимо сделать, использовать операцию сгиба (или агрегат, как это называют в СЕТИ).
items.Aggregate((accum, elem) => accum + ", " + elem);
Ну, в этом случае функциональный подход не мог бы подойти лучше всего, просто потому что нет LINQ "ForEach", и Вы не хотите использовать конкатенацию строк: Вы хотите использовать StringBuilder. Вы могли использовать ToArray (пример просто появился выше), но я испытаю желание просто использовать:
StringBuilder sb = new StringBuilder();
foreach(ListViewItem item in checkboxList.SelectedItems) {
if(sb.Length > 0) sb.Append(',');
sb.Append(item.Text);
}
string s = sb.ToString();
Не функциональное программирование, но это работает..., конечно, если Ваш источник уже , строка [] тогда представляет в виде строки. Соединение прекрасно. (LINQ является большим инструментом, но не обязательно всегда лучшим инструментом для каждого задания)
Вот способ LINQ/functional сделать его.
string[] toDelimit = CallSomeFunction();
return toDelimit.Aggregate((x, y) => x + "," + y);