C# 8.0 daha fazla hatayı yakalar

Womanne

Member


  1. C# 8.0 daha fazla hatayı yakalar

Eylül ayında, C# 8.0 için planlar bildirdim: referans türleri artık otomatik olarak sıfırlanamayacak; boş bir değer atama yeteneği, geliştiricilerin bunu açıkça beyan etmesini gerektirir.


C# 8.0 henüz kararlı bir sürümde mevcut değil. Ancak merak işimin bir parçası olduğundan ve Köln’deki DOTNET topluluk konferansında en son C# gelişmelerini bildireceğim için, kaynak kodunu GitHub’dan “features/NullableReferenceTypes” geliştirme dalından ve C# komut satırı derleyicisinden aldım. csc.exe kendi kendine tercüme

C# 7.3, programlama hatalarını tanımıyor


Test için biraz genişletilmiş bir “Merhaba Dünya” programı kullanıyorum. C# programlama dilinin 7.3 sürümü için mevcut kararlı C# derleyicisi (sürüm 2.8, 1 Mayıs 2018’de yayınlandı), program kodunu hatasız ve uyarısız olarak derler.

Elbette kusursuz çalışamaz: çalıştırdığınızda iki kez çalışma zamanı hatası görürsünüz: “Nesne referansı bir nesnenin örneğine ayarlanmadı”.

Burada boş kontroller (açıklama satırına bakın) veya sıfır değer toleransı girmelisiniz, örneğin Console.WriteLine(s?.Trim()).

using System;
namespace CS80Demo {
class Hello {

static string Einleitung = null;

static void Main () {

try {
Print ("Guten Tag!");
Print (Einleitung);
} catch (System.Exception ex) {
Console.WriteLine ("ERROR: " + ex.Message);
}

try {
Person p1 = new Person () { ID = 123, Name = "Holger Schwichtenberg" };
PrintPerson (p1);

Person p2 = null;
PrintPerson (p2);

Print ("... und auf Wiedersehen!");
} catch (System.Exception ex) {
Console.WriteLine ("ERROR: " + ex.Message);
}
}

static void Print (string s) {
Console.WriteLine (s.Trim ());
}

static void PrintPerson (Person p) {
// if (p==null) { Console.WriteLine("Person ist leer!"); return; }
Console.WriteLine (p.ID + ": " + p.Name);
}
}

class Person {
public int ID { get; set; }
public string Name { get; set; }
}
}

C# 8.0 daha katıdır



Ancak çeviri için C# 8.0 derleyicisini kullanırsanız, zaten NullReferenceException hatalarının yakın olduğuna dair uyarılar alırsınız (ekran görüntüsüne bakın).




C# 8.0, olası NullReferenceExceptions konusunda uyarır




C# 8.0’da, daha önce bahsedilen boş denetim veya sıfır toleransı uygulamanız gerekir. ve daha sonra türlerden sonra soru işareti olan halat? VE Kişi? burada null değerlerin atanabilmesi gerektiğini beyan edin.

using System;
namespace CS80Demo {
class Hello {

static string Einleitung = null;

static void Main () {

try {
Print ("Guten Tag!");
Print (Einleitung);
} catch (System.Exception ex) {
Console.WriteLine ("ERROR: " + ex.Message);
}

try {
Person?
p1 = new Person () { ID = 123, Name = "Holger Schwichtenberg" };
PrintPerson (p1);

Person? p2 = null;
PrintPerson (p2);

Print ("... und auf Wiedersehen!");
} catch (System.Exception ex) {
Console.WriteLine ("ERROR: " + ex.Message);
}
}

static void Print (string? s) {
Console.WriteLine(s?.Trim ());
}

static void PrintPerson (Person? p) {
if (p==null) { Console.WriteLine("Person ist leer!"); return; }
Console.WriteLine (p.ID + ": " + p.Name);
}
}

class Person {
public int ID { get; set; }
public string? Name { get; set; }
}
}

Derleyici sürüm ayarı


Bu açıkça, C# 7.x ve C# 8.0 arasındaki semantik sürüm oluşturma kapsamında izin verilecek olan “büyük bir değişiklik”tir. Microsoft, bu tür önemli değişiklikleri zaten planlamıştır: Visual Studio 2017 Update 3’ten (sürüm 15.3) başlayarak, geliştiriciler C# dil sürümünü proje özelliklerinde belirtebilir (Yapı | İlerlemek) – kullanılan .NET ve Visual Studio sürümünden bağımsız olarak. Ancak C# 8.0, Visual Studio 2017 Update 7’de (v15.7, ekran görüntüsüne bakın) ayarlanamaz. C# 8.0 derleyicisi şu anda yalnızca komut satırında kullanılabilir.




Visual Studio 2017 Güncelleme 7'de (15.3) sürüm kullanımdan kaldırma oluşturma





()



Haberin Sonu
 
Üst