Есть ли способ сохранить шаблон интерполированной строки в C#?C#

Место общения программистов C#
Anonymous
 Есть ли способ сохранить шаблон интерполированной строки в C#?

Сообщение Anonymous »

У меня есть этот класс под названием BaseMessage , который содержит сообщение поля строкового поля :

Код: Выделить всё

public class BaseMessage
{
public string Message;
...
}
И у меня есть другой класс ProcessMessage , который происходит от BaseMessage :

Код: Выделить всё

public class ProcessMessage : BaseMessage
{
...
}
< /code>
В целом этот класс создан в 500 различных местах по всему проекту. Иногда строка интерполируется: < /p>
var ret = new ProcessMessage() { Message = $"Some information {someParam}" };
< /code>
Иногда это не так: < /p>
var ret = new ProcessMessage() { Message = "Some information" };
< /code>
Иногда она передается как строковая переменная, например,: < /p>
var ret = new ProcessMessage() { Message = someMessage };
Что мне нужно достичь, так это каким -то образом сохранить шаблон интерполированной строки.
Я только что узнал, что вы можете использовать Formattablesting для него. />

Код: Выделить всё

public class ProcessMessage : BaseMessage
{
public new FormattableString Message;
...
}
Но этот подход не будет компилироваться, потому что вы не можете назначить обычную строку для FormattableString объекта. Я полностью в порядке, чтобы обычная строка была сохранена в формате свойство FormattableString . Но, похоже, нет правильного способа преобразования строки в FormattableString без редактирования всего проекта, или я не смог его найти.

Код: Выделить всё

public class SpecialString
{
public string StringValue { get; private set; }
public FormattableString FormattableValue { get; private set; }

public static implicit operator SpecialString(string value)
{
return new SpecialString { StringValue = value };
}

public static implicit operator SpecialString(FormattableString value)
{
return new SpecialString { FormattableValue = value };
}

public override string ToString()
{
return FormattableValue?.ToString() ?? StringValue ?? string.Empty;
}
}
< /code>
Но этот подход не сработал. C# всегда выбирает обычную строку.
Я думал, что, возможно, вы могли бы создать класс, который будет вытекать из FormattableString 
, но я не уверен, как.

Подробнее здесь: https://stackoverflow.com/questions/794 ... tring-in-c

Вернуться в «C#»