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.
Jegyzet
Ez a cikk egy funkcióspecifikáció. A specifikáció a funkció tervezési dokumentumaként szolgál. Tartalmazza a specifikáció javasolt módosításait, valamint a funkció tervezése és fejlesztése során szükséges információkat. Ezeket a cikkeket mindaddig közzéteszik, amíg a javasolt specifikációmódosításokat nem véglegesítik, és be nem építik a jelenlegi ECMA-specifikációba.
A szolgáltatás specifikációja és a befejezett implementáció között eltérések lehetnek. Ezeket a különbségeket a vonatkozó nyelvi tervezési értekezlet (LDM) megjegyzései rögzítik.
A funkcióspektusok C# nyelvi szabványba való bevezetésének folyamatáról a specifikációkcímű cikkben olvashat bővebben.
Bajnoki probléma: https://github.com/dotnet/csharplang/issues/1528
- [x] Javasolt
- [x] Implementáció: https://github.com/dotnet/roslyn/pull/56853
- [x] Specifikáció: ez a fájl.
Összefoglalás
A nyelv ma eltérően kezeli a nem szó szerinti és a szó szerinti interpolált sztringeket ($"" és $@""). Ezek esetében az elsődleges ésszerű különbség az, hogy egy nem szó szerint interpolált sztring úgy működik, mint egy normál sztring, és nem tartalmazhat új vonalakat a szövegszegmenseiben, és ehelyett feloldójeleket kell használnia (például \r\n). Ezzel szemben a szó szerinti interpolált sztringek tartalmazhatnak új sorokat a szövegszegmensekben (mint egy szó szerinti sztring), és nem szökik meg az új sorok vagy más karakterek elől (kivéve ha a ""-t használjuk, hogy magát az idézőjelet helyettesítsük).
Mindez ésszerű, és nem fog változni ezzel a javaslattal.
Ami ma ésszerűtlen, hogy kiterjesztjük a 'nincs új sor' korlátozását egy nem szó szerinti interpolált sztringben túl a szövegszegmenseken az interpolációkra magukra is. Ez például azt jelenti, hogy nem írhat a következőt:
var v = $"Count is\t: { this.Is.A.Really(long(expr))
.That.I.Should(
be + able)[
to.Wrap()] }.";
Végső soron az "interpolációnak egyetlen sorban kell lennie" szabály csak a jelenlegi végrehajtás korlátozása. Ez a korlátozás valóban nem szükséges, és bosszantó lehet, és meglehetősen triviális lenne eltávolítani (lásd a munka https://github.com/dotnet/roslyn/pull/54875, hogy hogyan). Végül csak arra kényszeríti a fejlesztőt, hogy mindent egy sorba helyezzen, vagy szó szerinti interpolált sztringet használjanak (mindkettő kényelmetlen lehet).
Az interpolációs kifejezések maguk nem szövegesek, és nem vonatkozhatnak rájuk semmilyen escape/újsor szabályok.
Specifikáció módosítása
single_regular_balanced_text_character
- : '<Any character except / (U+002F), @ (U+0040), \" (U+0022), $ (U+0024), ( (U+0028), ) (U+0029), [ (U+005B), ] (U+005D), { (U+007B), } (U+007D) and new_line_character>'
- | '</ (U+002F), if not directly followed by / (U+002F) or * (U+002A)>'
+ : <Any character except @ (U+0040), \" (U+0022), $ (U+0024), ( (U+0028), ) (U+0029), [ (U+005B), ] (U+005D), { (U+007B), } (U+007D)>
+ | comment
;
LDM-vitafórumok
https://github.com/dotnet/csharplang/blob/main/meetings/2021/LDM-2021-09-20.md
C# feature specifications