繁体   English   中英

如何传递有时为空的参数?

[英]How can I pass args that are sometimes null?

在此事件处理程序中:

        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有效)。 我估计有时候Position将为null ,有时不会。 我该怎么做才能让没有发现任何城市或州的时间畅通无阻? 我试图使RecordLocation()的定义中的那些字符串可为空,但是无法编译。

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

我该怎么做才能让没有发现任何城市或州的时间畅通无阻?

您只需要检查它。 例如:

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

如果您想使用args.Position做很多事情, 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)
    {
        // ...
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM