C#检查对象是否为空

时间:2019-02-15 14:48:06

标签: c# ssis

我在使用if语句检查对象是否为空时遇到麻烦。

我有一个webClient,可以通过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;
    }

RootObject是要反序列化的类。效果很好。

但是,我在if语句中出现错误,“使用未分配的类'ro'。

有人可以帮我解决这个问题吗? ro是否可以在if内部正常工作?

我还尝试检查特定的节点,但是它仍然挂在“ ro”部分。

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

谢谢

4 个答案:

答案 0 :(得分:8)

  1. try块可能永远不会为ro分配值,因此将在try块之外未分配值。要解决此问题,请分配一个值:

    RootObject ro = null;
    
  2. 由于ro可能是null,因此在尝试访问成员之前,需要在if语句中进行检查:

    if (ro != null && ro.Region != null)
    {
        Row.Region = ro.Region;
        Row.SubRegion = ro.Subregion;
    }
    

答案 1 :(得分: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;
}

答案 2 :(得分:4)

对象ro应该初始化,因为它在try范围之外被调用

RootObject ro = null;
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;
}

答案 3 :(得分:3)

ro初始化RootObject ro = null;并将if语句更改为

if (ro?.Region != null)
{
    Row.Region = ro.Region;
    Row.SubRegion = ro.Subregion;
}

这样,语句将检查ro为null或ro.Region为null