2016-04-15 21 views
0

以下のコードは単純化されたバージョンであり、多くの状況のた​​めに元のソースコードと同じソースコードを作成することは困難です。オブジェクト参照が既存のDatamember以外のオブジェクトのインスタンスに設定されていない

このコードに「var dd = playerList.FirstName.ToUpper();」と入力すると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーメッセージが表示されます。元のソースコードにdatamember FirstNameが存在しないためです。

要素名がFirstnameであるxmlファイルからランダムなデータが取得されます。私は何の要素ファーストネームを持っていない場合は、データメンバーは、元のソースコードでは使用できません、

私の質問は、

は、どのように私はC#のコードを使用して、データメンバー姓かを持っているかどうかを知るために有効にする必要がありますか?

ありがとうございました!


<PlayerList> 
    <Player> 
    <Id>1</Id> 
    <FirstName>John</FirstName> 
    <LastName>Smith</LastName> 
    <TotalGoalsScored>50</TotalGoalsScored> 
    <AverageGoalsPerGame>0.7</AverageGoalsPerGame> 
    <Team> 
     <Name>Arsenal</Name> 
     <YearEstablished>0</YearEstablished> 
    </Team> 
    </Player> 
    <Player> 
    <Id>2</Id> 
    <FirstName>Jack</FirstName> 
    <TotalGoalsScored>0</TotalGoalsScored> 
    <AverageGoalsPerGame>0</AverageGoalsPerGame> 
    </Player> 
</PlayerList> 




      string inputXmlPath1 = @"C:\dddd\data.xml"; 
      using (StreamReader reader = new StreamReader(inputXmlPath1)) 
      { 
       XmlSerializer playerListSerializer = new XmlSerializer(typeof(PlayerList)); 

       var playerList = (PlayerList)playerListSerializer.Deserialize(reader); 

       var dd = playerList.FirstName.ToUpper(); 
      } 





    [XmlRoot] 
    public class PlayerList 
    { 
     [XmlElement("Player")] 
     public List<Player> Players { get; set; } 
    } 




    public class Player 
    { 
     public int Id { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public int TotalGoalsScored { get; set; } 
     public double AverageGoalsPerGame { get; set; } 
    } 
+0

なぜ値を最初にテストするだけではないのですか? 'var dd = playerList.FirstName == null? null:playerList.FirstName.ToUpper(); ' –

+0

ソルーズコードを試しましたが、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーメッセージが表示されました。 –

+0

'PlayerList'クラスに' FirstName'の定義がないので、コードをコンパイルできません。返されたリストを繰り返して、それぞれの 'Player'の名字を印刷したくないのですか? – Quantic

答えて

0

あなたはこの例外を取得する場合、それはあなたが上のメソッドを呼び出す(またはプロパティへのアクセス)しようとしてきたメンバーがnullあったことを意味します。

したがって、あなたが進む前にデフォルト値にnullを合体できます

var dd = playerList.FirstName?.ToUpper(); // note: dd will be null is FirstName was null 

かに確認してください:あなたはまた、ヌル条件演算子を使用することができますC#6については

var dd = (playerList.FirstName ?? "").ToUpper(); // dd will be the empty string if FirstName was null 

を通常の条件文:

if (playerList.firstName == null) { // handle the null case 
+0

ご協力いただきありがとうございます! –

+0

答えは "var dd =(playerList.FirstName ??" ").ToUpper(); // FirstNameがnullの場合はddが空の文字列になります" –

関連する問題