.NET-10.0 Önizleme Sınıfı Genişler Kitaplıklar | Haberler Online

Saberie

Active member
.NET 9.0'ın yayınlanmasından iki ay sonra Microsoft, Pre -series .NET 10.0'a başlar. Önizlemenin ilk sürümü Microsoft'taki .NET indirme alanında bulunabilir (bkz. Şekil 1).


Duyuru








Doktor Holger Schwichtenberg, Maximago yazılımının geliştirilmesinde baş teknoloji uzmanıdır. Www.it- visions.de'deki uzman ekibi ile Microsoft, Java ve Web Teknikleri alanında tavsiye ve eğitim sunuyor.







Bu sürüm Visual Studio 2022 güncellemeleri ile yüklenmemiştir (bkz. Şekil 2).







.NET 10.0 kurulum ekranı başarılı ayarı bildirir (Şekil 1).


(Resim: Ekran görüntüsü (Holger Schwichtenberg))








Visual Studio'ya yapılan güncel güncelleme, .NET 10.0'ın ilk önizlemesini otomatik olarak yüklemez (Şekil 2).


(Resim: Ekran görüntüsü (Holger Schwichtenberg))



Uygulamaları .NET 10.0 Önizleme 1 ile doldurun, ancak hem Visual Studio 2022 17.13.1 hem de Visual Studio 2022 17.14.0 Önizleme 1.1. Ancak, Visual Studio 2022 17.13.1'de bir proje oluştururken .NET 10.0 mevcut değildir. Burada projede manuel olarak olmalısınız <TargetFramework>net10.0</TargetFramework> ayarlamak. Visual Studio 2022.14.0 Önizleme 1.1 ise .NET 10.0'ı bilir.

Linq leftjain () ve righjein () operatörleri


Son iki sürümde olduğu gibi .NET, Microsoft entegre dil sorgusu (LINQ) için yeni operatörler sağlar. Bu sefer LeftJoin() VE RightJoin() Miktar ve ilişkisel veritabanları teorisinin iki temel operatörü. Aslında, bu operasyonlar LINQ'da zaten mümkün oldu, ancak E Grubu'nun yardımıyla hantal DefaultIfEmpty(). Yeni yöntemler LeftJoin() VE RightJoin() Taahhüdü basitleştirir:


CUI.H2("--- LeftJoin ALT seit .NET Framework 3.5 ---");

var AllCompaniesWithWebsitesSetOld = outer
.GroupJoin(inner,
c => c.ID,
w => w.CompanyID,
(c, websites) => new { Company = c, Websites = websites })
.SelectMany(
x => x.Websites.DefaultIfEmpty(), // Falls keine Webseite existiert, wird `null` verwendet
(c, w) => new WebsiteWithCompany
{
Name = c.Company.Name,
URL = w.URL, // Falls `w` null ist, bleibt URL null
City = c.Company.City
});

foreach (var item in AllCompaniesWithWebsitesSetOld)
{
Console.WriteLine((item.Name != null ? item.Name + " " + item.City :
"- keine Firma - ") + " -> " + (item.URL ?? "- keine URL -"));
}

CUI.H2("--- LeftJoin NEU ab .NET 10.0 ---");
var AllCompaniesWithWebsitesSet = outer.LeftJoin(inner, e => e.ID, e => e.CompanyID, (c, w)
=> new WebsiteWithCompany { Name = c.Name, City = c.City, URL = w.URL });
foreach (var item in AllCompaniesWithWebsitesSet)
{
Console.WriteLine((item.Name != null ? item.Name + " " + item.City :
"- keine Firma - ") + " -> " + (item.URL ?? "- keine URL -"));
}

CUI.H2("--- RightJoin OLD seit .NET Framework 3.5 ---");
var WebsiteWithCompanySetOLD = inner
.GroupJoin(outer,
w => w.CompanyID,
c => c.ID,
(w, companies) => new { Website = w, Companies = companies })
.SelectMany(
x => x.Companies.DefaultIfEmpty(), // Falls kein Unternehmen existiert, bleibt `null`
(w, c) => new WebsiteWithCompany
{
Name = c.Name, // Falls `c` null ist, bleibt `Name` null
City = c.City, // Falls `c` null ist, bleibt `City` null
URL = w.Website.URL
});

foreach (var item in WebsiteWithCompanySetOLD)
{
Console.WriteLine((item.Name != null ? item.Name + " " + item.City :
"- keine Firma - ") + " -> " + (item.URL ?? "- keine URL -"));
}

CUI.H2("--- RightJoin NEU ab .NET 10.0 ---");
var WebsiteWithCompanySet = outer.RightJoin(inner, e => e.ID, e => e.CompanyID, (c, w)
=> new WebsiteWithCompany { Name = c.Name, City = c.City, URL = w.URL });

foreach (var item in WebsiteWithCompanySet)
{
Console.WriteLine((item.Name != null ? item.Name + " " + item.City :
"- keine Firma - ") + " -> " + (item.URL ?? "- keine URL -"));
}

// Zum Vergleich: Inner Join, den es seit .NET Framework 3.5 gibt
CUI.H2("--- InnerJoin seit .NET Framework 3.5 ---");
var CompaniesWithWebsitesSet = outer.Join(inner,
c => c.ID,
w => w.CompanyID,
(c, w) => new WebsiteWithCompany
{
Name = c.Name,
URL = w.URL,
City = c.City
});
foreach (var item in CompaniesWithWebsitesSet)
{
Console.WriteLine((item.Name != null ? item.Name + " " + item.City :
"- keine Firma - ") + " -> " + (item.URL ?? "- keine URL -"));
}



Yeni operatörler LeftJoin() VE RightJoin() Ayrıca veritabanına erişim için Enity Framework Core 10.0'da da desteklenirler, “Yeni Sol Operatörleri Destekle .NET 10” ve “Sağda Harici Katılımı Destekleme” sorunlarına danışın.

Geri dönüş ile tryadd ()


.NET 9.0'da tanıtılan jenerik sınıf System.Collections.Generic.OrderedDictionary<T,T> Zaten bir yöntem sundum TryAdd()Bu bir öğe eklemeye çalışır. Mevcut varyantın yanı sıra TryAdd(TKey key, TValue value) Şimdi de var TryAdd(TKey key, TValue value, out int index). Bu yeni aşırı yük, kalabalık arasında zaten varsa endeksi sağlar. Buna benzer TryGetValue() Şimdi sadece bir sesin değerini değil, aynı zamanda dizin yoluyla konumu da sağlayan bir aşırı yükle:


OrderedDictionary<string, string> websites = new OrderedDictionary<string, string>();
websites.Add("Haberler", "Haber");
websites.Add("Microsoft", "www.Microsoft.com");
websites.Add("IT-Visions", "www.IT-Visions.de");

var propertyName = "IT-Visions";
var value = "www.IT-Visions.de";

// bisher
if (!websites.TryAdd(propertyName, value))
{
int index1 = websites.IndexOf(propertyName); // Second lookup operation
CUI.Warning("Element " + value + " ist bereits vorhanden!");
}

// neu
if (!websites.TryAdd(propertyName, value, out int index))
{
CUI.Warning("Element " + value +
" ist bereits vorhanden an der Position " +
index + """!""");
}

// neu
if (websites.TryGetValue(propertyName, out string? value2, out int index2))
{
CUI.Success($"Element {value2} wurde gefunden an der Position {index2}.");
}


IP adreslerini kontrol edin


Şimdiye kadar IP adreslerini kontrol etmek için statik yöntem var IPAddress.TryParse()Bir karakter zincirinden gelen tek IP adresi veya

Çocuk ReadOnlySpan<char> VEYA ReadOnlySpan<byte> çıkarmak. BOOL'daki dönüş değeri ve çıkarılan IP adresi, sınıfın bir örneği şeklinde IPAddress GİBİ out-Parametre teslim edildi. Sadece IP adresinin doğru olup olmadığını kontrol etmek istiyorsanız, yazın IPAddress.TryParse(eingabe, out _).

.NET 10.0'da Microsoft, statik yöntemde daha az dahili çabaya sahip başka bir varyant sunuyor IsValid()Örneğin System.Net.IPAddress.IsValid("192.168.1.0"). Microsoft artık daha önce dahili bir yöntemi döndürüyor TargetHostNameHelper.IsValidAddress() dışarıya doğru.

System.text.json.jsonelement in getPropertyCount ()


Microsoft, JSON Kütüphanesi'nde sınıfa sahiptir JsonElement Yönteme göre GetPropertyCount() Kaç özelliğin bir JSON nesnesine sahip olduğunu belirlemenin mümkün olduğu ileri:


JsonElement element1 = JsonSerializer.Deserialize<JsonElement>("""{ "ID" : 1, "Name" : "Dr. Holger Schwichtenberg", "Website": "www.IT-Visions.de" }""");
Console.WriteLine(element1.GetPropertyCount()); // 3



Şimdiye kadar sadece bir dizideki nesne sayısını belirlemek mümkün olmuştur:


JsonElement element2 = JsonSerializer.Deserialize<JsonElement>("""[ 1, 2, 3, 4 ]""");
Console.WriteLine(element2.GetArrayLength()); // 4



Sınıfta JsonArray İsimler adına System.Text.Json.Nodes Microsoft iki yeni yöntemi sunuyor RemoveRange() VE RemoveAll(). RemoveRange() Dizin ve sayım için iki sayı kabul eder. Her zamanki gibi, dizin boş: array.RemoveRange(5, 2) Altıncı ve yedinci elemanı kaldırır. RemoveAll() beklenen Predicate<JsonNode>-Lot ve bir iptal kriteri sağlar. Örneğin array.RemoveAll(n => n.GetValue<int>() > 5):


System.Text.Json.Nodes.JsonArray array = JsonSerializer.Deserialize<System.Text.Json.Nodes.JsonArray>("""[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]""");
System.Console.WriteLine(array.Count); // 9
PrintJsonArray(array);

array.RemoveRange(5, 2);
PrintJsonArray(array);

array.RemoveAll(n => n.GetValue<int>() > 5);
PrintJsonArray(array);



Sınıf kütüphanesinde daha fazla iyileştirme


Microsoft ayrıca .NET 10.0 Önizleme 1'de aşağıdakileri de uyguladı:

  • Sınıfta X509Certificate2Collection Yeni yöntem çıkıyor FindByThumbprint()SHA dijital parmak izi tabanlı bir sertifika bulmak için
  • Sınıf ISOWeek Veri türünü yönetmek için üç yeni yöntem sunuyor DateOnly. Şimdiye kadar sadece buradaydı System.DateTime olası:
  • ZIP arşivi işlemenin uygulanması optimize edildi. Diğer şeylerin yanı sıra, Microsoft'a göre, ZIP Arşivleri güncellemesi % 99,8 oranında hızlandırıldı (2 GB 177.7 ms ila 0.13 ms eklendi) ve şimdi RAM'den % 99,99 daha az tüketiyor (şimdi RAM GB yerine 7.01 KB).
  • Ek açıklama [JsonSourceGenerationOptions] Kitaplıktaki Origin Jeneratörü için Text.Json Şimdi de dairesel referanslarda davranışı durdurmanıza izin verir Unspecified,, Preserve VEYA IgnoreCycles
  • Windows modüllerinde şimdi biraz fazla yük var GetData()-Dro'nun notları ve sürükleme işlemleri için metod BinaryFormatter Microsoft'un .NET 9.0'a genişlediğini ve şimdi Nuget paketinize ihtiyacınız olduğunu kullanın. Şimdi JSON ile çalışan yeni operasyonlar da var SetDataAsJson() VE TryGetData().
Sürüm notlarına göre, WPF'de sadece kalite iyileştirmeleri vardır. .NET Maui 10.0'da yeni ayarlar var. Ayrıca, Android projeleri şimdi dotnet run Doğrudan komut satırından başlatılmalıdır. .NET SDK'da paketin restorasyonunu hızlandırmak için bir optimizasyon vardır.
 
Üst