I am having trouble with an if statement for checking if an object is null.
I have a webClient go and pull a JSON string from a website in a try/catch. If it errors, it is because the 3 digit country does not exist in the API and I just want to skip it.
Here is my code:
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 is a class to deserialize to. This works fine.
However, I am getting an error in the if statement that "use of unassigned class 'ro'.
Can someone help me fix this? ro works as expected inside the if?
I have also tried checking a specific node and it is still getting hung up on the 'ro' part.
Also, this is a script component in SSIS.
Thanks
It is possible that the try
block will never assign a value to ro
and thus it will be unassigned outside of try block. To fix that, assign a value:
RootObject ro = null;
Since ro
could be null
, you need to check for that in your if
statement before you try to access a member:
if (ro != null && ro.Region != null)
{
Row.Region = ro.Region;
Row.SubRegion = ro.Subregion;
}
Give ro
a default value, so change RootObject ro
to RootObject ro = null;
and change ro.Region != null
to ro?.Region != null
to allow for ro
being null.
and possibly do something about swallowing that exception.
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;
}
The object ro should be initialized ,cause it is called outside the try scope
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;
}
Initialize ro
with RootObject ro = null;
and change the if statement to
if (ro?.Region != null)
{
Row.Region = ro.Region;
Row.SubRegion = ro.Subregion;
}
This way the statement will check if either ro is null or ro.Region is null
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With