Substytucja stringów - alternatywy do string.Format ?

0

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?

7

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

0

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.

2

Tak na szybko rzucilem okiem iiii... To niby jest lepsze od interpolacji? o.O

0

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.

1

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ł.

1

Juz bym wolal StringBuildera niz takie "cos"

ST hello = new ST("Hello, <name>");
hello.add("name", "World");
System.out.println(hello.render());
0

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.

4

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1