Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Tip
Bu makale, en az bir programlama dili bilen ve C# dilini öğrenen geliştiriciler için Temel Bilgiler bölümünün bir parçasıdır. Programlamaya yeni başladıysanız ilk olarak Başlangıç öğreticileri ile başlayın.
Java'den mi yoksa C++'tan mı geliyorsunuz? C# string, String tarafından desteklenen değiştirilemez bir başvuru tipidir. UTF-16, Java String benzer şekilde bellek içi kodlamadır. C/C++'ın aksine, karakter dizileri null ile sonlandırılmaz ve işaretçilere dönüşmez.
Dize, bir karakter dizisidir. C# dilinde, string türün System.String dil anahtar sözcüğüdür. Yazdığınız her dize sabiti bir System.String örneği oluşturur.
string ile String karşılaştırması
string anahtar sözcüğü ile String tür adı aynı türü ifade eder. Aynı ara dile (IL) derlenirler.
// The 'string' keyword is an alias for System.String. The two are identical.
string a = "hello";
String b = "hello";
Console.WriteLine(a == b); // True
Console.WriteLine(typeof(string) == typeof(String)); // True
string Kendi kodunuzda anahtar sözcüğü tercih edin. Diğer yerleşik tür anahtar sözcükleriyle (int, bool, double) tutarlıdır ve yönergesi using System; olmadan çalışır.
Dizgeler değiştirilemez.
Sabit, değerin oluşturulduktan sonra değiştirilemeyecek olması anlamına gelir. Bir string oluşturduğunuzda, karakterlerini değiştiremezsiniz. , ToUpperInvariant, Replaceve Substring gibi Trimyöntemler değiştirilmiş değeri içeren yeni bir dize döndürür. Özgün örnek aynı kalır.
string greeting = "hello";
// ToUpper returns a *new* string. The original is unchanged.
string shouted = greeting.ToUpperInvariant();
Console.WriteLine(greeting); // hello
Console.WriteLine(shouted); // HELLO
Dizeler değiştirilemez olduğundan, bunları farklı yöntemler ve iş parçacıkları arasında güvenle paylaşabilirsiniz. Bu değişmezlik, bir başvuru türü olsa bile türün string neden günlük kullanımda bir değer türü gibi davrandığını açıklar.
Bir döngü içinde birçok küçük parçadan bir dize oluştururken, yerinde ekleme yapıp sonunda tek bir dize üretmek için StringBuilder kullanın:
// For many sequential edits, StringBuilder avoids allocating a new string each time.
var builder = new StringBuilder();
for (int i = 1; i <= 3; i++)
{
builder.Append("item ").Append(i).Append(';');
}
string result = builder.ToString();
Console.WriteLine(result); // item 1;item 2;item 3;
Dize sabitleri
C# dört sabit değer biçimi sunar. Her form farklı içeriğe uygundur. Hızlı bir kılavuz olarak:
- En fazla birkaç kaçış dizisi içeren kısa ve basit metinler için normal sabitleri kullanın.
- İçerikte Windows yolları veya regex desenleri gibi ters eğik çizgilerin yoğun olduğu durumlarda verbatim sabitleri kullanın.
- Satır içi JSON, SQL, XML veya biçimlendirilmiş ileti blokları gibi çok satırlı veya yapısal olarak biçimlendirilmiş metinler için ham dize değişmez değerlerini kullanın.
- Değerleri gömmeniz gerektiğinde, enterpolasyonlu dize elde etmek için yukarıda belirtilen değişmez değerlerden herhangi birinin önüne
$ekini getirin. - Bayt odaklı API'ler için UTF-8 bayt dizisi (`
byte` türünde bir `ReadOnlySpan<T>`) üretmek üzere bir literale `u8` soneki ekleyin. Ayrıntılar için dil başvurusunda UTF-8 dize değişmez değerleri bölümüne bakın.
Normal sabit değerler ve kaçış dizileri
Normal bir dize sabiti çift tırnak içinde yazılır. Ters eğik çizgi bir kaçış dizisi başlatır:
// Common escape sequences inside a regular string literal.
string tabbed = "name:\tAda"; // \t tab
string twoLines = "line 1\nline 2"; // \n newline
string quoted = "She said \"hi\"."; // \" literal quote
string path = "C:\\src\\app"; // \\ literal backslash
Console.WriteLine(tabbed);
Console.WriteLine(twoLines);
Console.WriteLine(quoted);
Console.WriteLine(path);
Yaygın kaçış dizileri arasında \n (yeni satır), \t (sekme), \" (tırnak işareti), \\ (ters eğik çizgi karakteri), \0 (null karakter) ve Unicode kaçışları (\uXXXX, \UXXXXXXXX) bulunur.
C# 13'te başlayarak ESC \e denetim karakterini (U+001B) temsil eder. ANSI terminal kaçış dizilerinin başlangıç baytıdır:
// Beginning in C# 13, \e represents the ESC control character (U+001B).
// It's used to start ANSI terminal escape sequences.
string esc = "\e[31mError\e[0m: file missing";
Console.WriteLine(esc); // ESC[31mError ESC[0m: file missing
Console.WriteLine((int)'\e'); // 27
Metin kısa olduğunda ve yalnızca birkaç kaçış dizisi içerdiğinde normal bir değişmez kullanın. Kaçışlar görünür karakterlerin sayılarını aşmaya başladıktan sonra, düz harfe veya ham değişmez değere geçin.
Düz metin değişmez değerleri
Değişmez sabitin başına @ getirilir. Ters eğik çizgiler olduğu gibi yorumlanır; bu, Windows yolları ve düzenli ifade kalıpları için yararlıdır:
// A verbatim string literal (@) treats backslashes literally.
// Useful for Windows paths and regular expressions.
string winPath = @"C:\src\app\readme.md";
string pattern = @"\d{3}-\d{4}";
Console.WriteLine(winPath);
Console.WriteLine(pattern);
Birebir dize içine düz bir tırnak işareti yerleştirmek için, onu iki kez yazın: @"She said ""hi"".". Verbatim dizeleri de birden çok fiziksel satıra yayılabilir.
Ters eğik çizgiler içeriğin bir parçası olduğunda, ancak çok fazla ekli alıntınız olmadığında, düz metin değişmez değerleri doğru seçimdir. Çok satırlı metin veya tırnak işaretleri içeren içerik için ham dize değişmez değerleri genellikle daha nettir.
Ham dize değişmezleri
Tırnak işaretleri, ters eğik çizgi veya birden çok satır içeren tüm değişmez değerler için ham dize değişmez değerlerini tercih edin. Kaçış gürültüsünü tamamen ortadan kaldırır ve bu da onları kaynağın çıktı gibi görünmesi gereken satır içi JSON, SQL, XML, regex desenleri ve biçimlendirilmiş metin blokları için en uygun hale getirir:
// Raw string literals use three or more quotes and need no escaping.
// The source looks like the output, which is ideal for inline JSON, SQL, XML, and the like.
string json = """
{
"name": "Ada",
"roles": ["admin", "editor"]
}
""";
string sql = """
SELECT Id, Name
FROM Users
WHERE Name = 'O''Brien'
""";
Console.WriteLine(json);
Console.WriteLine(sql);
Ham dize sabitleri, kaçış dizilerini neredeyse tamamen ortadan kaldırır ve ihtiyaç duyduğunuz her türlü biçimlendirme ile tırnak işareti kullanımını destekler. Tam kurallar için ham dize sabitleri bölümüne bakın.
Ara değerli dizeler
$ öneki, bir sabiti enterpolasyonlu dizeye dönüştürür. Deliklerdeki {} ifadeler değerlendirilir ve sonuçları eklenir ve deliklerin içine standart biçim tanımlayıcıları ve hizalama uygulayabilirsiniz. Ara değer ekleme, diğer değişmez değer biçimleriyle de birleştirilir; birebir değişmez değere ara değer eklemek için $@"..." ya da zengin biçimlendirilmiş çıktı için ham dize değişmez değerine ara değer eklemek üzere $"""...""" kullanın:
// The $ prefix evaluates expressions inside { } and inserts their values.
string name = "Ada";
int score = 92;
string greeting = $"Hello, {name}! Your score is {score}.";
// Format specifiers and alignment work inside the holes.
string formatted = $"pi = {Math.PI:F3}, padded = |{name,10}|";
// Combine $ and """ for richly formatted multiline output.
string report = $"""
Report for {name}
-----------------
Score : {score}
Grade : {(score >= 90 ? "A" : "B")}
""";
Console.WriteLine(greeting);
Console.WriteLine(formatted);
Console.WriteLine(report);
İlişkilendirme, günlük koddaki değerlerden dize oluşturmanın önerilen yoludur.
Dizin oluşturma ve char
A string , UTF-16 kod birimleri dizisidir. Dizin oluşturucu bir System.Char döndürür; bu, tek bir UTF-16 kod birimini temsil eder ve mutlaka tam bir Unicode kod noktası olmayabilir.
Length kod birimlerinin sayısını döndürür.
// A string is a sequence of UTF-16 code units. s[i] returns one char.
string word = "café";
Console.WriteLine(word.Length); // 4
Console.WriteLine(word[0]); // c
foreach (char c in word)
{
Console.Write($"{c} "); // c a f é
}
Console.WriteLine();
Emoji veya Temel Çok Dilli Düzlem dışındaki karakterleri içerebilecek metinler için, Rune kullanarak rune bazında veya StringInfo kullanarak grafem kümesi bazında yineleyin. Düz char yineleme çoğu Batı metni ve ASCII baskın içerik için çalışır.
Dizelerin eşitliği
string üzerindeki eşitlik, referansları değil, karakter dizilerini karşılaştırır:
// String equality compares character sequences, not references.
string left = "hello";
string right = string.Concat("hel", "lo");
Console.WriteLine(left == right); // True
Console.WriteLine(left.Equals(right, StringComparison.Ordinal)); // True
Yerel ayara veya büyük/küçük harfe duyarlı olması gereken karşılaştırmalar için açık StringComparison bir değer geçirin. Protokol değerleri, tanımlayıcılar ve diğer dilsel olmayan metinler için kullanın StringComparison.Ordinal .
Yaygın dize işlemleri
C# dilinde günlük dize işlemleri için hızlı bir kılavuz olarak aşağıdaki tabloyu kullanın:
| Kategori | Neleri kapsıyor? |
|---|---|
| Search | Karakterleri veya alt dizeleri bulma, ön ekleri ve sonekleri test etme |
| Split | Bir dizeyi ayraçlara göre alt dizelere bölme |
| Birleştir | Dizeleri birleştirme — +, ilişkilendirme, Concat, Join |
| Modify | Dönüştürülmüş bir kopya üretin — Replace, Trim, Substring |
| Compare | Eşitliği ve sıralamayı doğru StringComparison ile test edin |
Tüm API yüzeyi (her aşırı yükleme, her yöntem) başvuruda String belgelenmiştir.