C#检查对象是否为空

Kei*_*thL 6 c# ssis

我遇到了一个if语句,用于检查对象是否为空.

我有一个webClient go并从try/catch中的网站中提取JSON字符串.如果它出错,那是因为API中不存在3位数国家,我只是想跳过它.

这是我的代码:

    System.Net.WebClient wc = new System.Net.WebClient();

    RootObject ro;
    try
    {
        string resp = wc.DownloadString("https://restcountries.eu/rest/v2/alpha/" + Row.Code.ToString());

        JavaScriptSerializer js = new JavaScriptSerializer();

        ro = js.Deserialize<RootObject>(resp);
    }
    catch (Exception e)
    { }

    if (ro.Region != null)
    {
        Row.Region = ro.Region;
        Row.SubRegion = ro.Subregion;
    }
Run Code Online (Sandbox Code Playgroud)

RootObject是一个反序列化的类.这很好用.

但是,我在if语句中遇到"使用未分配的类'ro'时出错.

有人可以帮我解决这个问题吗?ro在if中如预期的那样工作?

我也试过检查一个特定的节点,它仍然挂在'ro'部分.

此外,这是SSIS中的脚本组件.

谢谢

D S*_*ley 8

  1. 这可能是该try块绝不会分配一个值ro,因此这将是try块的未分配之外.要解决此问题,请指定一个值:

    RootObject ro = null;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 既然ro可能null,您需要在if尝试访问成员之前在语句中检查:

    if (ro != null && ro.Region != null)
    {
        Row.Region = ro.Region;
        Row.SubRegion = ro.Subregion;
    }
    
    Run Code Online (Sandbox Code Playgroud)


Mur*_*oft 6

给ro一个默认值,因此改变RootObject ro至RootObject ro = null;

并更改ro.Region != null为ro?.Region != null允许为ro空.

并可能做一些关于吞咽这种例外的事情.

System.Net.WebClient wc;

RootObject ro = null;
try
{
    wc = new System.Net.WebClient();
    string resp = wc.DownloadString("https://restcountries.eu/rest/v2/alpha/" + Row.Code.ToString());

    JavaScriptSerializer js = new JavaScriptSerializer();

    ro = js.Deserialize<RootObject>(resp);
}
catch (Exception e)
{
    // Log your error
}

if (ro?.Region != null)
{
    Row.Region = ro.Region;
    Row.SubRegion = ro.Subregion;
}
Run Code Online (Sandbox Code Playgroud)