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()は有効です)。位置が になる場合もあればnull、そうでない場合もあると思います。市や州が見つからない時代が衰えずに過ぎ去るようにするにはどうすればよいでしょうか? の定義でこれらの文字列をヌル可能にしようとしましRecordLocation()たが、コンパイルされません。

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、1 つの「外部」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 に答える