在此事件处理程序中:
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.CivicAddress
是null
(传递给RecordLocation()
的其他args都有效)。我估计有时位置会null
,有时则不会。如果没有城市或国家被发现的时间,我能做些什么呢?我尝试将RecordLocation()
定义中的那些字符串置为可空,但这不会编译。
我是否需要检查CivicAddress是否为null并创建我的RecordLocation()
方法的重载版本,还是有另一种方法来处理它?</ p>
答案 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)
{
// ...
}
}