Resharper deneme sürümü var ve her zaman düzenli dizeleri kelimesi kelimesine dizeleri önerir. Fark ne?
Resharper deneme sürümü var ve her zaman düzenli dizeleri kelimesi kelimesine dizeleri önerir. Fark ne?
Yanıtlar:
Bir sözcük dizesi, bir dosya adı gibi kaçması gerekmeyen bir dizedir:
string myFileName = "C:\\myfolder\\myfile.txt";
olabilir
string myFileName = @"C:\myfolder\myfile.txt";
@ Sembolü bu dizeyi kelimenin tam anlamıyla okumak ve kontrol karakterlerini başka şekilde yorumlamamak anlamına gelir.
Bu, C # spesifikasyonunun 2.4.4.5 bölümünde ele alınmıştır :
2.4.4.5 Dize değişmezleri
C # dize değişmezlerinin iki biçimini destekler: normal dize değişmez değerleri ve kelimesi kelimesine dize değişmez değerleri.
Normal dize değişmez değeri, "merhaba" gibi çift tırnak içine alınmış sıfır veya daha fazla karakterden oluşur ve hem basit kaçış dizilerini (sekme karakteri için \ t gibi) hem de onaltılık ve Unicode kaçış dizilerini içerebilir.
Bir sözcük dizesi değişmezi, @ karakterinden sonra çift tırnak karakteri, sıfır veya daha fazla karakter ve kapanış çift tırnak karakteri içerir. Basit bir örnek @ "merhaba" dır. Kelimesi kelimesine bir dize değişmezinde, ayırıcılar arasındaki karakterler kelimesi kelimesine yorumlanır, tek istisna bir tırnak-kaçış-dizisidir. Özellikle, basit kaçış dizileri ve onaltılık ve Unicode kaçış dizileri, kelimesi kelimesine dizgi değişmezlerinde işlenmez. Bir sözcük dizesi değişmezi birden çok satıra yayılabilir.
Diğer bir deyişle, @ "verbatim string literal" daki tek özel karakter çift tırnak karakteridir. Çift tırnak içeren bir sözcük dizesi yazmak istiyorsanız, iki çift tırnak yazmanız gerekir. Diğer tüm karakterler tam anlamıyla yorumlanır.
Kelimenin tam anlamıyla bir dizgi değişmezinde yeni satırlar bile olabilir. Normal bir dizgi değişmezinde değişmez yeni satırlar olamaz. Bunun yerine örneğin kullanmalısınız "\n".
Aynen dizgi değişmezleri genellikle dosya kodlarını ve düzenli ifadeleri kaynak koduna gömmek için kullanışlıdır, çünkü bu tür dizelerde ters eğik çizgiler yaygındır ve normal bir dizgi değişmezi kullanılmışsa kaçması gerekir.
Çalışma zamanında, normal dize değişmezlerinden oluşturulan dizeler ile kelimesi kelimesine bir dize değişmezlerinden oluşturulan dizeler arasında fark yoktur - her ikisi de türdür System.String.
Bir dize ve sözcük dizesi arasında çalışma zamanı farkı yoktur. Sadece derleme zamanında farklıdırlar. Derleyici, sözlü bir dizede daha az kaçış dizisi kabul eder, böylece bir alıntıdan başka ne görürsen onu alırsın.
Derleyiciye bir anahtar kelimeye ad olarak davranmasını bildirmek için kelimesi kelimesi @ olan da kullanabilirsiniz:
var @if = "if";
//okay, treated as a name
Console.WriteLine(@if);
//compiler err, if without @ is a keyword
Console.WriteLine(if);
var @a = "a";
//okay
Console.WriteLine(@a);
//also okay, @ isn't part of the name
Console.WriteLine(a);
Aynen dizeleri kullanarak da çok satırlı dizeye sahip olabilirsiniz:
Console.WriteLine(@"This
is
a
Test
for stackoverflow");
@senin bir hata olmadan .
VB14'te yeni bir özellik var, Multiline StringsC # 'da kelimesi kelimesine benziyor.

Profesyonel ipucu: VB string değişmezleri artık tam olarak C # kelimesi kelimesine benzer.
Düzenli dizeler, özel karakterlere çevirmek için özel kaçış dizileri kullanır.
/*
This string contains a newline
and a tab and an escaped backslash\
*/
Console.WriteLine("This string contains a newline\nand a tab\tand an escaped backslash\\");
Aynen dizeleri, herhangi bir kaçış dizisi çevrilmeden olduğu gibi yorumlanır:
/*
This string displays as is. No newlines\n, tabs\t or backslash-escapes\\.
*/
Console.WriteLine(@"This string displays as is. No newlines\n, tabs\t or backslash-escapes\\.");