170 похожих чатов

Подскажите, пожалуйста. У меня есть класс со свойствами разных типов,

например:
public string starting_level { get; set; }

public Dictionary<string, string> name { get; set; }
public Dictionary<string, Level> levels { get; set; }У этого класса я перегружаю метод ToString(), и описываю свою реализацию. Мне надо, чтобы при myObject.ToString() выводилось на экран что-то такое:
M.locations["M1"].starting_level = "M1_L1"
M.locations["M1"].name = {}
M.locations["M1"].name[common.locales.en_us] = "Location 1 (N5)"
M.locations["M1"].levels["M1_L1"] = {}
M.locations["M1"].levels["M1_L1"].location = "M1"То есть, у каждого типа должен быть еще один свой перегруженный ToString(). Как мне это сделать? Или как лучше организовать код?
Мой метод ToString() для всего класса сейчас выглядит как-то так:
public override string ToString()
{
StringBuilder line = new StringBuilder();
line.AppendLine(String.Format("M.locations[\"{0}\"] = ", locationName) + "{}");

foreach(var property in GetType().GetProperties())
{ line.AppendLine(property.GetValue(this).ToFormatString(property, locationName));
}

return line.ToString();
}Здесь ToFormatString() - это метод-расширение, который я хотел написать для каждого типа моих свойств, но в итоге понял, что это не сработает, ведь в результате property.GetValue() возвращается object, у которого я не могу узнать тип.
И что же делать? )=

1 ответов

3 просмотра

С трудом, но вроде понял что требуется. Если у вас уже есть один свой тип, который переопределил тустринг, так создайде ещё парочку, пусть будут его полями вместо готовых системных. Можно и другой подход придумать, что вам удобней и по задаче ближе.

Похожие вопросы

Обсуждают сегодня

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
Есть предложения, как подобное можно упростить?
Hemul GM
12
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
У меня вопросик назрел. Почему, создав класс без наследования и реализации деструктора Destroy, деструктор не вызывался при free. Потом указал наследование от tobject и overri...
Сергей Бычков
9
@y0zhig @shizzard А можно я опишу цель и может вообще ерланг мне не подходит. На текущий момент как я понимаю у ерланга есть легковесные потоки и задача выполняется в каком т...
Дмитрий Спиридонов
5
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
just use free version ?? pycharm has a free version
Fan / Ac
9
Карта сайта