C# 如何传递有时为空的参数?
在此事件处理程序中:C# 如何传递有时为空的参数?,c#,geolocation,coordinates,windows-phone-8,nullreferenceexception,C#,Geolocation,Coordinates,Windows Phone 8,Nullreferenceexception,在此事件处理程序中: public static void geolocator_PositionChanged(Geolocator sender, PositionChangedEventArgs args) { DateTimeOffset timeStampUTC = args.Position.Coordinate.Timestamp.ToUniversalTime(); DateTimeOffset ti
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引用异常
,因为args.Position.CivicAddress
是Null
(传递到RecordLocation()
的其余arg是有效的)。我估计有时候位置会是空的,有时候不会。我该怎么做才能让没有城市或国家的时代不受影响地过去?我试图使RecordLocation()
的定义中的那些字符串为空,但无法编译
我是否需要检查CivicAddress是否为null并创建我的RecordLocation()
方法的重载版本,或者是否有其他方法来处理此问题
我该怎么做才能让没有城市或国家的时代不受影响地过去
你只需要检查一下。例如:
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)
{
// ...
}
}