.NET 7.0’daki yenilikler [26]: Düzenli ifadeler için kaynak oluşturucu

Womanne

Member


  1. .NET 7.0’daki yenilikler [26]: Düzenli ifadeler için kaynak oluşturucu

Microsoft, .NET 5.0 ve C# 9.0’da kaynak kodu üreteçlerini zaten kullanıma sunmuştur. Şimdi .NET 7.0’da sınıfta böyle bir düzenli ifade üreteci var System.Text.RegularExpressions.Generatorbu, çalışma zamanı veya çalışma zamanı derlemesinin önceki yorumuna göre normal ifadelerin yürütülmesini geliştirir (RegexOptions.Compiled) hızlandırılmış düzenli ifadeler. Ayrıca, geliştirme zamanı kodu oluşturma, artık çalışma zamanı derlemesine izin vermeyen yakında çıkacak olan .NET Early Compilation (bu serinin 17. Bölümüne bakın) ile uyumludur.

Duyuru








Dr Holger Schwichtenberg, güvenlikle ilgili son derece kritik alanlarda bile yenilik ve deneyim odaklı yazılım geliştirme sunan MAXIMAGO’da Baş Teknoloji Uzmanıdır. Aynı zamanda, çok sayıda orta ölçekli ve büyük şirketi yazılım geliştirme ve işletim konusunda 38 tanınmış uzmanla danışmanlık ve eğitimle destekleyen uzman ağı www.IT-Visions.de’nin başkanıdır.







Bunu yapmak için kısmi bir yöntemle kısmi bir sınıf yazın (listeye bakın). Bu yöntem ile açıklamalı System.Text.RegularExpressions.GeneratedRegexAttribute (önizleme aşamasında sınıfın adı RegexGenerator verwendet) düzenli ifadeyi ve gerekli RegEx ayrıştırıcı seçeneklerini belirterek.

Örnek


Daha önce, sınıfla .NET’te normal ifadelerle çalıştınız System.Text.RegularExpressions.RegEx yapıcıdaki normal ifadeyi belirtmek. Normal ifade çalışma zamanında yorumlandı


public string ExtractEMail_Classic(string input)
{
var re =
new Regex(@"w+([-+.']w+)*@w+([-.]w+)*.w+([-.]w+)*");
var m = re.Match(input);
return m.Value;
}



veya çalışma zamanında Ara Dilde derlenmiş:

Duyuru


public string ExtractEMail_ClassicCompiled(string input)
{
// Specifies that the regular expression is compiled to MSIL code,
// instead of being interpreted. Compiled regular expressions
// maximize run-time performance at the expense of initialization time.
var re =
new Regex(@"w+([-+.']w+)*@w+([-.]w+)*.w+([-.]w+)*",
RegexOptions.Compiled);
var m = re.Match(input);
return m.Value;
}



Bu yol .NET 7.0’da yenidir: ek açıklama ile kısmi bir sınıfa kısmi bir yöntem yazın [GeneratedRegex]:


public partial class Checker // Partielle Klasse
{
[GeneratedRegex(@"w+([-+.']w+)*@w+([-.]w+)*.w+([-.]w+)*")]
// Partielle Methode, die dann von SG implementiert wird
public partial Regex EMailRegEx();
}








Kısmi yöntem EMailRegEx() için oluşturulan uygulama (Şekil 1)



Daha sonra bu yöntemi kodunuzda çağırabilirsiniz:


public bool IsEMail(string input)
{
return EMailRegEx().IsMatch(input);
}



VEYA


public string ExtractEMail(string input)
{
return EMailRegEx().Match(input).Value;
}



Visual Studio’da yeniden düzenleme


17.4 sürümünden Visual Studio 2022, mevcut RegEx örnekleri için yeni kaynak oluşturucuda yeniden düzenleme sunar:







Yeni RegEx() öğesini şu şekilde yeniden düzenleyin: [GeneratedRegex] (şekil 2)



görüş


Bu serinin bir sonraki bölümü, sınıfı kullanmak yerine kaynak oluşturucuyla normal ifadeleri yürütme hızı hakkındadır. RegEx.


(rm)



Haberin Sonu
 
Üst