Информация об изменениях

Сообщение Парсинг бинарных сообщений от 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

Можете конкретнее на проблему указать: вроде всё норм
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)
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 весьма не плохо можетб быть.