Nesne başvurusu bir nesnenin örneğine ayarlanmadı.Neden't değil .`Boş nesne`olan NET gösterir?
Bu ilgili .NET işlenmeyen bir özel durum iletisi:
Nesne başvurusu bir nesnenin örneğine ayarlanmadı.
Neden gelmiyor .NET null
hangi şov?
null
için kontrol edin ve hatayı gidermek biliyorum. Ancak, neden yok .NET boş bir referans olan işaret Yardım ve anlatım NullReferenceException
tetikledi?
CEVAP
Bu kodu göz önünde bulundurun:
String s = null;
Console.WriteLine(s.Length);
Bu NullReferenceException
ikinci bir çizgi atar ve neden bilmek istiyorsunuz .NET olduğunda özel durum oluşturuldu boş olduğunu s
olduğunu söylemiyor.
C unutmamalısınız bilgi parçasını alamadım neden anlamak# ama oldukça IL yürüten kaynak:
IL_0001: ldnull IL_0002: stloc.0 // s IL_0003: ldloc.0 // s IL_0004: callvirt System.String.get_Length IL_0009: call System.Console.WriteLine
O callvirt
işlem kodu atar NullReferenceException
ve o zaman ilk bağımsız değerlendirme yığın, bir null başvuru (yüklenmiş kullanarak ldloc.0
).
Eğer .NET bir şekilde değerlendirme ilk argüman kökenli form yığını izlemek gerekir boş bir başvuru oldu s
olduğunu söylemek mümkün s
olmalıdır. Bu durumda bize boş ama eğer değer başka bir işlev çağrısının dönüş değeri olsaydı ne o s
olduğunu görmek için kolay ve herhangi bir değişken içinde saklı değil mi? Her neyse, bu tür bilgileri takip etmek istediğin bir şey olmaması gibi bir sanal makine .NET sanal makine.
Bu sorunu önlemek için tüm kamu yöntem çağrıları elbette boş başvuru izin vermedikçe, (): argüman null kontrol gerçekleştirmenizi öneririm
public void Foo(String s) {
if (s == null)
throw new ArgumentNullException("s");
Console.WriteLine(s.Length);
}
Null yöntemi geçirilir, tam olarak sorunun ne olduğunu açıklayan bir durum s
null () olsun.
Neden değil't bu başka bir şey at...
Neden C# birbirleri ile iki nesne türl...
Neden UnhandledExceptionEventArgs.Bir ...
Neden't bir WordPress kullanmak d...
Sözlük vs ve neden?daha verimli olan N...