0

在此事件处理程序中:

        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()是有效的)。我认为有时 Position 会null,有时不会。我该怎么做才能让找不到城市或州的时代有增无减?我试图使RecordLocation()'s 定义中的那些字符串可以为空,但这不会编译。

我是否需要检查 CivicAddress 是否为 null 并创建我的RecordLocation()方法的重载版本,还是有其他方法来处理这个问题?

4

1 回答 1

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)
    {
        // ...
    }
}
于 2013-01-20T16:12:54.080 回答