2011-08-11 16 views
20

Dinamik bir nesnede null- null-check nasıl yapabilirim?C#: Dinamik bir nesnede null-check nasıl yapılır

sözde kod:

public void Main() { 
    dynamic dynamicObject = 33; 
    if(true) { // Arbitrary logic 
     dynamicObject = null; 
    } 
    Method(dynamicObject); 
} 

public void Method(dynamic param) { 
    // TODO: check if the content of 'param' is equal to null 
} 

cevap

30

dinamik nesne null yorumlanır şekilde değişecektir özel eşitlik operatörü olacak olasılığı üzülüyor musunuz? yani sadece Object.ReferenceEquals

if (Object.ReferenceEquals(null, param)) { 
    ....... 
} 
+3

+1 Elbette. – Ani

+0

@Ani rağmen 'Object.' kaybedebilirsiniz ne 'orada oraya ne olduğundan emin değilim. – JaredPar

+1

Sadece “ReferenceEquals” yazabilirsiniz (boş, param). Bu konuyla ilgili 5 sorudan, SO'nun bunu basitçe çözmediğine inanamıyorum. –

0

kullanıyorsanız Her zamanda tipi nesnesinin param yapabilir, bu derleyici bunu yapıyor. Bir parametre dinamiği yazdığınızda, sadece bu metot içinde sadece paramın tüm kullanımları için dinamik invoke kullanıyor demektir, fakat bunun dışında sadece bir tip nesnenin imzasıdır. DynamicObject öğesinin daha güçlü bir kullanımı, aradığınız yöntemin aşırı yüklenmesine sahip olmaktır. Bu nedenle, örneğinizi aynı tutarsanız ve yalnızca iki aşırı yüklenme varsa, çalışma zamanı türüne göre iki yöntemden birini çağırırsınız ve her zaman daha fazla tür için daha fazla ekleyin.

public void Main() { 
    dynamic dynamicObject = 33; 
    if(true) { // Arbitrary logic 
     dynamicObject = null; 
    } 
    Method(dynamicObject); 
} 
public void Method(int param) { 
    //don't have to check check null 
    //only called if dynamicObject is an int 
} 
public void Method(object param) { 
// will be called if dynamicObject is not an int or null 
} 
İlgili konular