2011-09-01 102 views
-1

如何传递空值的方法传递空值的方法

[Import("Default", typeof(ISomeInterface), AllowRecomposition = true, AllowDefault = true)] 
public ISomeInterface x { get; set; } 
// x is null till now 
void DoWork(ISomeInterface obj) //Not working 
{ 
     if (obj == null) 
     { 
      //Download and Satisfy 
      DeploymentCatalog DC = new DeploymentCatalog("TheXAPfile.xap"); 
      DC.DownloadCompleted += (s, e) => 
      { 
       catalog.Catalogs.Add(f); //catalog is AggregateCatalog 
       obj.Show(); 
      }; 
      DC.DownloadAsync(); 
     } 
     else 
     { 
      obj.Show(); 
     } 

} 

由于

+0

什么是不工作?你有一个实现'ISomeInterface'的值类型吗? – dlev

+0

显示发生实际错误的代码部分以及它给出的消息(如果有),或者在编译器错误时显示编译器消息。 –

+0

System.NullReferenceExcption:[Arg_NullRefrenceException] – MrBassam

回答

0

这里你假设obj为null,当您启动异步下载,而且好歹它DownloadCompleted被触发时没有更多的空。你有没有表现出保证你满足这个条件? DownloadAsync之后你在做什么,以及如何确保在完成下载之前评估这些内容?

if (obj == null) 
    { 
     //// you enter here only if obj is null 
     //Download and Satisfy 
     DeploymentCatalog DC = new DeploymentCatalog("TheXAPfile.xap"); 
     DC.DownloadCompleted += (s, e) => 
     { 
      catalog.Catalogs.Add(f); //catalog is AggregateCatalog 
      //// here you are assuming that obj is not null anymore. Why??? 
      obj.Show(); 
     }; 
     DC.DownloadAsync(); 
    } 
+0

+1这是有用的:是的,这简直是使用'obj.Show();'当obj是显然还是空所导致的问题。 EBKAC! –

+0

这是 我添加了这行 如果(ISomeInterface!= NULL)ISomeInterface.Show()的问题; 而且工作正常 谢谢:) – MrBassam

-2

这可以通过将实现?在函数头中的对象类型之后。

void DoWork(ISomeInterface? obj) 
+4

除非'ISomeInterface'是一个可怕的命名值类型,这是不合法的,对引导来说也是多余的(因为接口变量已经可以为null)。 – dlev

+1

实际上接口是引用类型,没有必要在末尾添加'?'以传递'null' .. – Samich

1

例外是使用obj的某些方法或属性为空时的结果。你如果空来检查自己的

void DoWork(ISomeInterface obj) //Not working 
{ 
    if(obj == null) 
    { 
     return; 
    } 
    /* do something ... */} 
} 
+0

这是正确的。这与可为空的类型无关,但要自行检查对象是否为null。 –

+0

我谢谢:) – MrBassam