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)
    {
        // ...
    }
}