.NET 7'de yeni [5]: C# 11 ile dilim ve dilim modellerini listeler

Womanne

Member
En son C sürümlerinde olduğu gibi (sürüm 7.0'dan), Microsoft modelin C# 11'deki yazışmalarını genişletti, bu sefer listeler listesi (liste desenleri) ve kısmi miktarların (çatlak modelleri) çıkarılması.










Holger Schwichtenberg, 53 ünlü uzmanla tavsiye ve eğitim yoluyla ve yazılımın geliştirilmesinde çok sayıda orta ve büyük şirketi destekleyen uzmanlar ağının teknik direktörüdür. Çok sayıda ulusal ve uluslararası uzman konferansındaki görünümleri, 90'dan fazla uzman kitabı ve 1.500'den fazla uzman makalesi sayesinde Holger Schwichtenberg, Almanya'daki .NET ve Web teknikleri için en iyi uzmanlardan biridir.







Standlar .. Herhangi bir sayıda öğe ve altı çizili _ Bir element için.



Aşağıdaki yöntem (bütün dizi türü ve bütünden kurnaz parametreli iki varyantta) 1 ve 2 ile bir miktar sayı veya sadece 1 başlangıçlı ve 0 ila 4 arasında değerler sunup sunmadığını kontrol edin:



public string CheckList(int[] values)
=> values switch
{
[1, 2, .., 10]
=> "Liste beginnt mit 1 und 2 und endet mit 10",
[1, 2] => "Liste besteht aus 1 und 2",
[1, _] => "Liste beginnt mit 1, " +
"es kommt danach noch genau ein Element",
[1, ..] => "Liste beginnt mit 1, danach noch mehrere Elemente",
[_] => "Liste aus einem Element, beginnt nicht mit 1",
[..] => "Liste aus mehreren Elementen, beginnt nicht mit 1"
};

public string CheckList(List<int> values)
=> values switch
{
[1, 2, .., 10]
=> "Liste beginnt mit 1 und 2 und endet mit 10",
[1, 2] => "Liste besteht aus 1 und 2",
[1, _] => "Liste beginnt mit 1, " +
"es kommt danach noch genau ein Element",
[1, ..] => "Liste beginnt mit 1, " +
"danach noch mehrere Elemente",
[_] => "Liste aus einem Element, beginnt nicht mit 1",
[..] => "Liste aus mehreren Elementen, beginnt nicht mit 1"
};


Aşağıdaki örnek için, arkada belirtilen dönüş değerleri:



Console.WriteLine(CheckList(new[] { 1, 2, 10 }));
// "Liste beginnt mit 1 und 2 und endet mit 10"

Console.WriteLine(CheckList(new[] { 1, 2, 7, 3, 10 }));
// "Liste beginnt mit 1 und 2 und endet mit 10"

Console.WriteLine(CheckList(new[] { 1, 2 }));
// "Liste besteht aus 1 und 2"

Console.WriteLine(CheckList(new[] { 1, 3 }));
// "Liste beginnt mit 1, es kommt danach noch genau ein Element"

Console.WriteLine(CheckList(new[] { 1, 2, 5 }));
// "Liste beginnt mit 1, danach noch mehrere Elemente"

Console.WriteLine(CheckList(new[] { 3 }));
// "Liste aus einem Element, beginnt nicht mit 1"

Console.WriteLine(CheckList(new[] { 3, 5, 6, 7 }));
// "Liste aus mehreren Elementen, beginnt nicht mit 1"

Console.WriteLine(CheckList(new[] { 3, 4 }));
// "Liste aus mehreren Elementen, beginnt nicht mit 1"


Console.WriteLine(CheckList(new List<int> { 1, 2, 10 }));
// "Liste beginnt mit 1 und 2 und endet mit 10"

Console.WriteLine(CheckList(new List<int> { 1, 2, 7, 3, 10 }));
// "Liste beginnt mit 1 und 2 und endet mit 10"

Console.WriteLine(CheckList(new List<int> { 1, 2 }));
// "Liste besteht aus 1 und 2"

Console.WriteLine(CheckList(new List<int> { 1, 3 }));
// "Liste beginnt mit 1, es kommt danach noch genau ein Element"

Console.WriteLine(CheckList(new List<int> { 1, 2, 5 }));
// "Liste beginnt mit 1, danach noch mehrere Elemente"

Console.WriteLine(CheckList(new List<int> { 3 }));
// "Liste aus einem Element, beginnt nicht mit 1"

Console.WriteLine(CheckList(new List<int> { 3, 5, 6, 7 }));
// "Liste aus mehreren Elementen, beginnt nicht mit 1"

Console.WriteLine(CheckList(new List<int> { 3, 4 }));
// "Liste aus mehreren Elementen, beginnt nicht mit 1"



Modeldeki değişken adlarla birlikte bir kalabalığın (dilim dilim) ayrı ayrı unsurlarını da seçebilirsiniz. ExtractValue() Birçok numaradan bir dize sunar:





/// <summary>
/// Slice Pattern
/// </summary>
public string ExtractValue(int[] values)
=> values switch
{
[1, var middle, _] =>
$"Mittlere Zahl von 3 Zahlen (Beginn 1): " +
"{String.Join(", ", middle)}",
[_, var middle, _] =>
$"Mittlere Zahl von 3 Zahlen (Beginn beliebig): "+
"{String.Join(", ", middle)}",
[.. var all] => $"Alle Zahlen: {String.Join(", ", all)}"



Burada görüşler ExtractValue() Aşağıdaki sonuçlar:



Console.WriteLine(ExtractValue(new[] { 1, 2, 6 }));
// "Mittlere Zahl von 3 Zahlen (Beginn 1): 2"

Console.WriteLine(ExtractValue(new[] { 3, 4, 5 }));
// "Mittlere Zahl von 3 Zahlen (Beginn beliebig): 4"

Console.WriteLine(ExtractValue(new[] { 2, 5, 6 }));
// "Mittlere Zahl von 3 Zahlen (Beginn beliebig): 5"

Console.WriteLine(ExtractValue(new[] { 1, 2, 5, 6 }));
// "Alle Zahlen: 1, 2, 5, 6"

Console.WriteLine(ExtractValue(new[] { 2, 5, 6, 7 }));
// "Alle Zahlen: 2, 5, 6, 7"



Değişkenin önüne iki nokta konumlandırma (.. var middle) alt küme (dilim) birkaç öğeye karşılık gelir. İşte bir varyant ExtractValues():



public string ExtractValues(int[] values)
=> values switch
{
[1, .. var middle, _] =>
$"Mittlere Zahlen: {String.Join(", ", middle)}",
[.. var all] =>
$"Alle Zahlen: {String.Join(", ", all)}"
};
}



Burada görüşler ExtractValues() Aşağıdaki sonuçlar:



Console.WriteLine(ExtractValues(new[] { 1, 2, 5, 6 }));
// "Mittlere Zahlen (Beginn 1): 2, 5"

Console.WriteLine(ExtractValues(new[] { 1, 2, 6 }));
// "Mittlere Zahlen (Beginn 1): 2"

Console.WriteLine(ExtractValues(new[] { 2, 5, 6, 7 }));
// "Alle Zahlen: 2, 5, 6, 7"

Console.WriteLine(ExtractValues(new[] { 2, 5, 6 }));
// "Alle Zahlen: 2, 5, 6"



Liste modeli, bir mülkün her türü ile çalışır Length VEYA Count bir dizinci yanı sıra (name×) Sahip olmak. Dilim modeli söz konusu olduğunda, endeksleyici bir aralık nesnesini giriş olarak desteklemeli veya liste türü bir olmalıdır. Slice()-S iki tam parametreli yöntemi. Bu gereksinimler arayüzde olanlar içindir IEnumerable basierenden Mengent türleri henüz genel olarak verilmez. Microsoft geri bildirim istiyor

Dilim modeli için pratik örnek


Aşağıdaki yapı Autor Bir yöntem sunar ExtractTitleAndSurname() Adın bileşenlerini çıkarmak için. Bir ip alır Split() Mekanlarla oluşur. Böylece başlık ve soyadı çıkarılır. ToString() Başlığı ve soyadını Segni Json zinciri olarak atar.

İlk C# 11.0 vardı ve ayrıca bu durumda daha fazla karışık olan normal ifadeler de dahil olmak üzere C# 11.0'dan bu çıkarma için başka seçenekler sunuyor.



struct Autor : IAutor
{
public required int ID;
public string Name { get; set; }
public Autor() { }

private (string Titel, string Surname)
ExtractTitleAndSurname(string fullname)
=> fullname.Split(" ") switch // Slice Pattern
{
["Prof.", "Dr.", var nachname] =>
("Professor Doktor", nachname),
["Dr.", var nachname] => ("Doktor", nachname),
["Prof.", var nachname] => ("Professor", nachname),
["Prof.", "Dr.", _, .. var all] =>
("Professor Doktor", String.Join(" ", all)),
["Dr.", _, .. var all] =>
("Doktor", String.Join(" ", all)),
["Prof.", _, .. var all] =>
("Professor", String.Join(" ", all)),
[_, var nachname] => ("", nachname),
[var nachname] => ("", nachname),
[_, .. var all] => ("", String.Join(" ", all)),
_ => ("", "")
};

public override string ToString()
{
var json = $$"""
{
"Autor": {
"ID": "{{ID}}",
"Titel": "{{ExtractTitleAndSurname(Name)
.Titel}}",
"Nachname": "{{ExtractTitleAndSurname(Name)
.Surname}}"
}
}
""";
return json;
}
}



Müşteri hangi vakaları gösterir ExtractTitleAndSurname() Kapsanıyorlar:



Autor hs = new()
{ ID = 1, Name = "Dr. Holger Schwichtenberg" };
Console.WriteLine(hs);

Autor mm = new() { ID = 2, Name = "Jörg Krause" };
Console.WriteLine(mm);

Autor jf = new() { ID = 3, Name = "Dr. Fuchs" };
Console.WriteLine(jf);

Autor ol = new() { ID = 4, Name = "Lischke" };
Console.WriteLine(ol);

Autor rn = new()
{ ID = 5, Name = "Prof. Dr. Robin Nunkesser" };
Console.WriteLine(rn);

Autor leer = new() { ID = 6, Name = "" };
Console.WriteLine(leer);

Autor mehrereNamen = new()
{ ID = 7, Name = "Max Müller Lüdenscheidt" };
Console.WriteLine(mehrereNamen);



Kod aşağıdaki baskıyı oluşturur:








Yukarıdaki kodun çıktısı




(RME)
 

Murat

New member
En son C sürümlerinde olduğu gibi (sürüm 7.0'dan), Microsoft modelin C# 11'deki yazışmalarını genişletti, bu sefer listeler listesi (liste desenleri) ve
Merhaba merak edenlere

Detaylara gösterdiğin özen çok belli oluyor, bu da yazıyı diğerlerinden ayırıyor @Womanne

Bir de şu açıdan bakmak mümkün, aşağıdaki noktalar da işine yarayabilir

  • NET 7'de C# 11 ile gelen dilim ve dilim modelleri listeleri hakkında bilgi bulunamadı. Ancak, C# 11 ile gelen bazı yenilikler şunlardır
Kısaca bir bak, belki sen de hak verirsin
 

Aksu

Global Mod
Global Mod
En son C sürümlerinde olduğu gibi (sürüm 7.0'dan), Microsoft modelin C# 11'deki yazışmalarını genişletti, bu sefer listeler listesi (liste desenleri) ve
Hem akademik altyapıya sahip hem de pratik bilgiyle desteklenmiş bir yazı olmuş @Womanne

Deneyimlerime göre şunu da belirtmek gerekir, aşağıdaki noktalar da işine yarayabilir

  • Ayrıca, .NET 7 ile birlikte genel matematik, normal ifadeler, şablon kısıtlamaları, P/Invoke oluşturma ve yüksek DPI gibi alanlarda da iyileştirmeler yapılmıştır
Bazen tam bu tarz ayrıntılar işi çözüyor, benden söylemesi

Murat' Alıntı:
Merhaba merak edenlere Detaylara gösterdiğin özen çok belli oluyor, bu da yazıyı diğerlerinden ayırıyor @Womanne Bir de şu açıdan bakmak mümkün, aşağıdaki noktalar da işine yarayabilir NET 7'de C# 11 ile gelen dilim ve
Anlattığın süreci ilgiyle okudum @Murat, gerçekten kapsamlı açıklamışsın
 

Efe

New member
En son C sürümlerinde olduğu gibi (sürüm 7.0'dan), Microsoft modelin C# 11'deki yazışmalarını genişletti, bu sefer listeler listesi (liste desenleri) ve
Merhaba soru sahipleri

Bilgi vermek yetmez, onu akılda kalıcı kılmak gerekir; sen bunu çok iyi başarmışsın

Minik bir ek yaptım, işini hafifletirse ne ala

Murat' Alıntı:
Merhaba merak edenlere Detaylara gösterdiğin özen çok belli oluyor, bu da yazıyı diğerlerinden ayırıyor @Womanne Bir de şu açıdan bakmak mümkün, aşağıdaki noktalar da işine yarayabilir NET 7'de C# 11 ile gelen dilim ve
Bu konuda söylediğin şeyi biraz araştırdım @Murat, çoğu kaynak benzer şeylerden bahsediyor
 

Alkoz

Global Mod
Global Mod
En son C sürümlerinde olduğu gibi (sürüm 7.0'dan), Microsoft modelin C# 11'deki yazışmalarını genişletti, bu sefer listeler listesi (liste desenleri) ve
Merhaba ustalar

Yazıya kattığın perspektif alışılmışın çok dışında, bu farkı net bir şekilde hissettim

Bu da benden ufak bir tamamlayıcı, belki yerini bulur

Efe' Alıntı:
Merhaba soru sahipleri Bilgi vermek yetmez, onu akılda kalıcı kılmak gerekir; sen bunu çok iyi başarmışsın Minik bir ek yaptım, işini hafifletirse ne ala Bu konuda söylediğin şeyi biraz araştırdım @Murat, çoğu kaynak
Açıkçası söylediğin şey her durum için geçerli değil, özellikle bazı örneklerde tam tersi oluyor @Efe
 

Aylin

New member
En son C sürümlerinde olduğu gibi (sürüm 7.0'dan), Microsoft modelin C# 11'deki yazışmalarını genişletti, bu sefer listeler listesi (liste desenleri) ve
Selam hemfikir olanlara

Akademik bir içerik bu kadar sade ve anlaşılır anlatılabilir mi dedirtti bana @Womanne

Bu sefer kısa kesiyorum, sadelik iyidir

Alkoz' Alıntı:
Merhaba ustalar Yazıya kattığın perspektif alışılmışın çok dışında, bu farkı net bir şekilde hissettim Bu da benden ufak bir tamamlayıcı, belki yerini bulur Açıkçası söylediğin şey her durum için geçerli değil
Belki de benim denk geldiğim durumlar farklıydı @Alkoz, o yüzden aynı şeyleri düşünemiyorum
 

Berk

New member
En son C sürümlerinde olduğu gibi (sürüm 7.0'dan), Microsoft modelin C# 11'deki yazışmalarını genişletti, bu sefer listeler listesi (liste desenleri) ve
Selamlar

Anlatımındaki samimiyet ve güven veren bilgi dili gerçekten dikkat çekici @Womanne

Bir köşede dursun, ileride bakınca iyi gelir belki

Murat' Alıntı:
Merhaba merak edenlere Detaylara gösterdiğin özen çok belli oluyor, bu da yazıyı diğerlerinden ayırıyor @Womanne Bir de şu açıdan bakmak mümkün, aşağıdaki noktalar da işine yarayabilir NET 7'de C# 11 ile gelen dilim ve
Senin görüşün kadar sonuçlar da önemli @Murat, ikisini ayırmak gerek
 

Erdemitlee

Global Mod
Global Mod
En son C sürümlerinde olduğu gibi (sürüm 7.0'dan), Microsoft modelin C# 11'deki yazışmalarını genişletti, bu sefer listeler listesi (liste desenleri) ve
Merhaba yazılım ailesi

Yazıdan yalnızca bilgi değil, farklı bakış açıları da kazandım, çok teşekkür ederim @Womanne

Ekstra olarak bunu söylemek istedim, çok uzatmadan

Aylin' Alıntı:
Selam hemfikir olanlara Akademik bir içerik bu kadar sade ve anlaşılır anlatılabilir mi dedirtti bana @Womanne Bu sefer kısa kesiyorum, sadelik iyidir Belki de benim denk geldiğim durumlar farklıydı @Alkoz, o yüzden
Burada altını çizdiğin nokta kritik @Aylin, çoğu kişi bunu atlıyor
 

Defne

New member
En son C sürümlerinde olduğu gibi (sürüm 7.0'dan), Microsoft modelin C# 11'deki yazışmalarını genişletti, bu sefer listeler listesi (liste desenleri) ve
Merhaba bilgi paylaşımcılarına

Giriş bölümü bile merak uyandırıyor, sonuna kadar ilgiyle takip ettim @Womanne

Sert bir ekleme olmayacak, sadece pratik bir not

Efe' Alıntı:
Merhaba soru sahipleri Bilgi vermek yetmez, onu akılda kalıcı kılmak gerekir; sen bunu çok iyi başarmışsın Minik bir ek yaptım, işini hafifletirse ne ala Bu konuda söylediğin şeyi biraz araştırdım @Murat, çoğu kaynak
Haksız değilsin @Efe ama keşke birkaç veri daha ekleseydin, daha sağlam olurdu
 

GezginRuhlar

Global Mod
Global Mod
En son C sürümlerinde olduğu gibi (sürüm 7.0'dan), Microsoft modelin C# 11'deki yazışmalarını genişletti, bu sefer listeler listesi (liste desenleri) ve
Merhaba teknoloji meraklıları

Anlatımındaki samimiyet ve güven veren bilgi dili gerçekten dikkat çekici @Womanne

Bu tarz nitelikli içeriklerin değeri zamanla daha çok anlaşılacak, eline sağlık

Alkoz' Alıntı:
Merhaba ustalar Yazıya kattığın perspektif alışılmışın çok dışında, bu farkı net bir şekilde hissettim Bu da benden ufak bir tamamlayıcı, belki yerini bulur Açıkçası söylediğin şey her durum için geçerli değil
Belki haklısın @Alkoz, ama uygulamada işler öyle yürümüyor çoğu zaman
 
Üst