Сообщение Парсинг бинарных сообщений от 25.01.2023 11:18
Изменено 25.01.2023 11:36 _FRED_
Re[2]: Почему в C# не любят кастомные операторы?
Здравствуйте, gandjustas, Вы писали:
S>>Вот в С++ любят. И ведь приятнее же написать
G>В C++ вообще любят извращения.
S>>stringBuilder += "test" чем stringBuilder.Append("test") ?
G>stringBuilder += "test" эьо stringBuilder = stringBuilder + "test", он должен возвращать новый объекти не изменять старый. Поэтому stringBuilder.Append
Можете конкретнее на проблему указать: вроде всё норм
Описанная вами ниже "х + х + х" тут не случится, потому что речь об операторе сложения билдера и строки.
G>Да и в целом со стрингбилдером крайне редкий кейс, чтобы для него вводить такое в язык.
На сколько я знаю, в BCL вообще не переопределяют операторы там, где это не общеизвестно, типа арифметики. То есть вопрос не в редкости, а в принципиальном подходе. Что не мешает делать такое "для себя", потому что самому со своим DSL весьма не плохо можетб быть.
S>>Вот в С++ любят. И ведь приятнее же написать
G>В C++ вообще любят извращения.
S>>stringBuilder += "test" чем stringBuilder.Append("test") ?
G>stringBuilder += "test" эьо stringBuilder = stringBuilder + "test", он должен возвращать новый объекти не изменять старый. Поэтому stringBuilder.Append
Можете конкретнее на проблему указать: вроде всё норм
using System.Text;
var builder = new MyStringBuilder();
builder.Append("A");
builder.Append("B").Append("C");
builder += "D";
Console.WriteLine($"Builder is {builder}"); // Builder is ABCD
builder += "E" + builder + "F"; // And even…
Console.WriteLine($"Builder now is {builder}"); // Builder now is ABCDEABCDF
file class MyStringBuilder
{
private StringBuilder Builder { get; } = new StringBuilder();
public MyStringBuilder Append(string? value) {
Builder.Append(value);
return this;
}
public override string ToString() => Builder.ToString();
public static MyStringBuilder operator+(MyStringBuilder builder, string value) => builder.Append(value);
}
Описанная вами ниже "х + х + х" тут не случится, потому что речь об операторе сложения билдера и строки.
G>Да и в целом со стрингбилдером крайне редкий кейс, чтобы для него вводить такое в язык.
На сколько я знаю, в BCL вообще не переопределяют операторы там, где это не общеизвестно, типа арифметики. То есть вопрос не в редкости, а в принципиальном подходе. Что не мешает делать такое "для себя", потому что самому со своим DSL весьма не плохо можетб быть.
Парсинг бинарных сообщений
Здравствуйте, gandjustas, Вы писали:
S>>Вот в С++ любят. И ведь приятнее же написать
G>В C++ вообще любят извращения.
S>>stringBuilder += "test" чем stringBuilder.Append("test") ?
G>stringBuilder += "test" эьо stringBuilder = stringBuilder + "test", он должен возвращать новый объекти не изменять старый. Поэтому stringBuilder.Append
Можете конкретнее на проблему указать: вроде всё норм (sharplab.io)
Описанная вами ниже "х + х + х" тут не случится, потому что речь об операторе сложения билдера и строки.
Это я к тому, что в отсутствии перегрузки оператора, кажется, нет ни технической ни даже логической проблем.
G>Да и в целом со стрингбилдером крайне редкий кейс, чтобы для него вводить такое в язык.
На сколько я знаю, в BCL вообще не переопределяют операторы там, где это не общеизвестно, типа арифметики. То есть вопрос не в редкости, а в принципиальном подходе. Что не мешает делать такое "для себя", потому что самому со своим DSL весьма не плохо можетб быть.
S>>Вот в С++ любят. И ведь приятнее же написать
G>В C++ вообще любят извращения.
S>>stringBuilder += "test" чем stringBuilder.Append("test") ?
G>stringBuilder += "test" эьо stringBuilder = stringBuilder + "test", он должен возвращать новый объекти не изменять старый. Поэтому stringBuilder.Append
Можете конкретнее на проблему указать: вроде всё норм (sharplab.io)
using System.Text;
var builder = new MyStringBuilder();
builder.Append("A");
builder.Append("B").Append("C");
builder += "D";
Console.WriteLine($"Builder is {builder}"); // Builder is ABCD
builder += "E" + builder + "F"; // And even…
Console.WriteLine($"Builder now is {builder}"); // Builder now is ABCDEABCDF
file class MyStringBuilder
{
private StringBuilder Builder { get; } = new StringBuilder();
public MyStringBuilder Append(string? value) {
Builder.Append(value);
return this;
}
public override string ToString() => Builder.ToString();
public static MyStringBuilder operator+(MyStringBuilder builder, string value) => builder.Append(value);
}
Описанная вами ниже "х + х + х" тут не случится, потому что речь об операторе сложения билдера и строки.
Это я к тому, что в отсутствии перегрузки оператора, кажется, нет ни технической ни даже логической проблем.
G>Да и в целом со стрингбилдером крайне редкий кейс, чтобы для него вводить такое в язык.
На сколько я знаю, в BCL вообще не переопределяют операторы там, где это не общеизвестно, типа арифметики. То есть вопрос не в редкости, а в принципиальном подходе. Что не мешает делать такое "для себя", потому что самому со своим DSL весьма не плохо можетб быть.