我遇到了一个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中的脚本组件.
谢谢
这可能是该try块绝不会分配一个值ro,因此这将是try块的未分配之外.要解决此问题,请指定一个值:
RootObject ro = null;
Run Code Online (Sandbox Code Playgroud)既然ro可能null,您需要在if尝试访问成员之前在语句中检查:
if (ro != null && ro.Region != null)
{
Row.Region = ro.Region;
Row.SubRegion = ro.Subregion;
}
Run Code Online (Sandbox Code Playgroud)给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)
| 归档时间: |
|
| 查看次数: |
1170 次 |
| 最近记录: |