.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ıyorFindByThumbprint()
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 sunuyorDateOnly
. Ş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çinText.Json
Şimdi de dairesel referanslarda davranışı durdurmanıza izin verirUnspecified
,,Preserve
VEYAIgnoreCycles
- Windows modüllerinde şimdi biraz fazla yük var
GetData()
-Dro'nun notları ve sürükleme işlemleri için metodBinaryFormatter
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 varSetDataAsJson()
VETryGetData()
.
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.
Bir yanıt yazın