Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A C# 10 már támogatja a jobb sztringinterpolációt, ami magában foglalja az egyéni "kezelők" célzásának lehetőségét is a sztringek mellett. StringBuilder új túlterhelésekkel kihasználja ezt, amelyek lehetővé teszik Append és AppendLine számára, hogy egyéni interpolált sztringkezelőt fogadjanak el. Előfordulhat, hogy a metódusok meglévő hívásai most elkezdhetik a kapcsolódást az új túlterhelésekhez. A viselkedés általában azonos, de jobb teljesítménnyel. Például ahelyett, hogy először létrehozunk egy karakterláncot, majd azt adjuk hozzá, az interpolált karakterlánc egyes elemeit közvetlenül az építőhöz fűzzük hozzá. Ez azonban megváltoztathatja a formátumelemként használt objektumok kiértékelési sorrendjét, ami a viselkedésbeli különbségként nyilvánulhat meg.
Előző viselkedés
A korábbi verziókban egy hívás a következőre:
stringBuilder.Append($"{a} {b}");
fordítása a következőnek felel meg:
stringBuilder.Append(string.Format("{0} {1}", a, b));
Ez azt jelenti, hogy először a értékelik ki, majd b értékelik ki, ezután egy sztringet hoznak létre ezen kiértékelések eredményeiből, amit végül hozzáfűznek az összefűzőhöz.
Új viselkedés
A .NET 6-tól kezdve a következő hívásokat kell elindítania:
stringBuilder.Append($"{a} {b}");
kompilálódik azzal, ami ekvivalens a következővel
var handler = new StringBuilder.AppendInterpolatedStringHandler(1, 2, stringBuilder);
handler.AppendFormatted(a);
handler.AppendLiteral(" ");
handler.AppendFormatted(b);
stringBuilder.Append(ref handler);
Ez azt jelenti, hogy a kiértékelik és hozzáfűzik az építőhöz, majd b kiértékelik és hozzáfűzik az építőhöz.
Ha például vagy a, vagy b maga az építő, ahogy az a következő kódban látható, az új kiértékelési sorrend futásidőben eltérő viselkedést eredményezhet.
stringBuilder.Append($"{a} {stringBuilder}");
Bevezetett verzió
6.0 RC 1
A kompatibilitástörő változás típusa
Ez a módosítás hatással lehet a forráskompatibilitásra.
A változás oka
Gyakran előfordul, hogy a fejlesztők interpolált sztringeket adnak át StringBuilder, mivel ez kényelmesebb, mint manuálisan felosztani a sztringet, és meghívni StringBuilder.Append az egyes részekhez. Ezek az új túlterhelések lehetővé teszik az egyes hívások tömör szintaxisát és a teljesítményük nagy részét.
Javasolt művelet
A legtöbb esetben, ahol StringBuilder.Append és StringBuilder.AppendLine van használva, nem fog funkcionális különbséget észlelni. Ha olyan különbséget talál, amely problémásnak bizonyul, visszaállíthatja a viselkedést az előző állapotra úgy, hogy hozzáad egy típuskonverziót a (string) előtt az interpolált sztringhez. Például:
stringBuilder.Append((string)$"{a} {b}")
Ez azonban nem ajánlott, hacsak nem szükséges a kompatibilitáshoz.