我怎样才能传递有时为空的args?

时间:2013-01-20 16:10:47

标签: c# geolocation coordinates windows-phone-8 nullreferenceexception

在此事件处理程序中:

        public static void geolocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args)
        {
            DateTimeOffset timeStampUTC = args.Position.Coordinate.Timestamp.ToUniversalTime();
            DateTimeOffset timeStampLocal = timeStampUTC.LocalDateTime;
            DateTimeOffset dateTimeStampUTC = timeStampUTC.DateTime;
            RecordLocation(args.Position.Coordinate.Latitude, args.Position.Coordinate.Longitude,    
            args.Position.CivicAddress.City, args.Position.CivicAddress.State, dateTimeStampUTC, timeStampLocal);
        }

...我收到了Null Reference Exception,因为args.Position.CivicAddressnull(传递给RecordLocation()的其他args都有效)。我估计有时位置会null,有时则不会。如果没有城市或国家被发现的时间,我能做些什么呢?我尝试将RecordLocation()定义中的那些字符串置为可空,但这不会编译。

我是否需要检查CivicAddress是否为null并创建我的RecordLocation()方法的重载版本,还是有另一种方法来处理它?<​​/ p>

1 个答案:

答案 0 :(得分:7)

  

如果没有找到城市或州,那么我可以做些什么呢?

你只需要检查一下。例如:

if (args.Position != null && args.Position.CivicAddress != null)
{
    // Now you can use args.Position.CivicAddress.State safely
}

如果你想用args.Position做很多事情,你很可能想要一个“外部”if语句 - 很可能用一个局部变量来简化事情:

var position = args.Position;
if (position != null)
{
    if (position.CivicAddress != null)
    {
        // Use properties of position.CivicAddress
    }
    // Assuming Coordinate is nullable to start with, of course...
    if (position.Coordinate != null)
    {
        // ...
    }
}