Fajna funkcja. Chciałbym tylko podkreślić nacisk na to, dlaczego jest to lepsze niż string.format, jeśli nie jest to oczywiste dla niektórych osób.
Czytam kogoś mówiącego polecenie string.format na „{0} {1} {2}”, aby dopasować parametry. Nie musisz zamawiać „{0} {1} {2}” w string.format, możesz także zrobić „{2} {0} {1}”. Jeśli jednak masz wiele parametrów, na przykład 20, naprawdę chcesz zsekwencjonować ciąg znaków do „{0} {1} {2} ... {19}”. Jeśli jest to potargany bałagan, trudno będzie ci wyrównać parametry.
Za pomocą $ możesz dodać parametr inline bez zliczania parametrów. Dzięki temu kod jest znacznie łatwiejszy do odczytania i utrzymania.
Minusem $ jest to, że nie można łatwo powtórzyć parametru w ciągu, należy go wpisać. Na przykład, jeśli masz dość pisania System.Environment.NewLine, możesz zrobić string.format („... {0} ... {0} ... {0}”, System.Environment.NewLine), ale w $ musisz to powtórzyć. Nie możesz zrobić $ „{0}” i przekazać go do string.format, ponieważ $ „{0}” zwraca „0”.
Na marginesie przeczytałem komentarz w innym zduplikowanym tpoiku. Nie mogłem komentować, więc oto jest. On to powiedział
string msg = n + " sheep, " + m + " chickens";
tworzy więcej niż jeden ciąg znaków. To nie jest prawda. Jeśli zrobisz to w jednym wierszu, utworzy tylko jeden ciąg i zostanie umieszczony w pamięci podręcznej łańcucha.
1) string + string + string + string;
2) string.format()
3) stringBuilder.ToString()
4) $""
Wszystkie zwracają ciąg znaków i tworzą tylko jedną wartość w pamięci podręcznej.
Z drugiej strony:
string+= string2;
string+= string2;
string+= string2;
string+= string2;
Tworzy 4 różne wartości w pamięci podręcznej, ponieważ są 4 „;”.
W ten sposób łatwiej będzie napisać kod jak poniżej, ale utworzyłbyś pięć interpolowanych ciągów znaków, jak poprawił Carlos Muñoz:
string msg = $"Hello this is {myName}, " +
$"My phone number {myPhone}, " +
$"My email {myEmail}, " +
$"My address {myAddress}, and " +
$"My preference {myPreference}.";
Tworzy to jeden ciąg znaków w pamięci podręcznej, a kod jest bardzo łatwy do odczytania. Nie jestem pewien co do wydajności, ale jestem pewien, że stwardnienie rozsiane zoptymalizuje to, jeśli już tego nie robi.