Podrzucie jakiś pomysł, podstawiam fragmenty stringów przez string.Format ... {0} {1}
ale wzór do wypełnienia pełen jest klamerek i męka z tym jest.
Jest coś w bibliotece standardowej, co robi to inaczej?
Zamiast formatowac, interpoluj
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated
Edit: ewentualnie jakis StringBuilder ale nie sadze zeby to bylo lepsze
Znalazłem poza biblioteką standardową i/ale jest lekkie, StringTemplate wersja C# (javowską znałem dawniej). Więc uznaję za finał.
Akceptuje klamerki w sobie, mimo że mogą być częścią własnego syntaxu. Ale to siedzi na porządnej bibliotece parserowej a nie na dziecinadach.
Tak na szybko rzucilem okiem iiii... To niby jest lepsze od interpolacji? o.O
Napisałem kiedyś w początkach swojego zainteresowania C# funkcję formatującą zgodnie z printfem z C, bo też mi się klamerki nie podobały.
Dzisiaj bym już sobie nie zawracał głowy, tylko użył tego co jest standardowo.
Nie siedzę w C#, ale jeśli ten język ma wbudowane dobre rozwiązanie, to dlaczego z niego nie skorzystać?
Samo widzi-misie wydaje się zbyt słabym argumentem. To samo kompatybilność z Dżawą(?).
Jedyny powód jaki mógłbym uznać to słabą wydajność, o ile ktoś to przetestował.
Juz bym wolal StringBuildera niz takie "cos"
ST hello = new ST("Hello, <name>");
hello.add("name", "World");
System.out.println(hello.render());
Uwaga ortodoksi, jedzie Java ... ;)
Miało to powstać w Javie, ale po wycofaniu JAXB nie chciało mi się kombinować, użyłem świeżych doświadczeń XMLowych w C#. Nie da się ukryć, że blokowe stringi w C# są fajne.
{
string STpattern = @"@Embedded
@AttributeOverrides({
@AttributeOverride(name = 'Key', column = @Column(name = '$key$')),
@AttributeOverride(name = 'Type', column = @Column(name = '$name$Type'))
})
$type$Accesor $name$;
";
Antlr4.StringTemplate.Template stringTemplate = new Template(STpattern,'$','$');
stringTemplate.Add("key", column.name);
stringTemplate.Add("name", column.name);
stringTemplate.Add("type", column.type);
STpattern = stringTemplate.Render().Replace('\'', '"').Replace(" "," ").Replace(" ", " ").Replace(" ", " ").Replace(" ", " ");
file.WriteLine(STpattern);
}
W weekend pojadę dalej, skorzystam z konstrukcji warunkowej w templejtce.
To nie jest kwestia ortodoksyjności tylko pragmatyczności.
Instalowanie jakichś lewych portów javowych bibliotek i uczenie się jakiegoś alternatywnego języka do klejenia stringów to dodatkowy nakład pracy, który obiektywnie niczego nie daje. Można mieć po prostu tak i tyle:
string s = $@"@Embedded
@AttributeOverrides({{
@AttributeOverride(name = 'Key', column = @Column(name = '{column.key}')),
@AttributeOverride(name = 'Type', column = @Column(name = '{column.name}{column.type}'))
}})
$type$Accesor $name$;
";
A swoją drogą, to mi to wygląda raczej na to, że potrzebujesz jakiejś abstrakcji do budowania tego, co chcesz budować, a nie klejenia stringów.