以下のコードは単純化されたバージョンであり、多くの状況のために元のソースコードと同じソースコードを作成することは困難です。オブジェクト参照が既存の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; }
}
なぜ値を最初にテストするだけではないのですか? 'var dd = playerList.FirstName == null? null:playerList.FirstName.ToUpper(); ' –
ソルーズコードを試しましたが、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーメッセージが表示されました。 –
'PlayerList'クラスに' FirstName'の定義がないので、コードをコンパイルできません。返されたリストを繰り返して、それぞれの 'Player'の名字を印刷したくないのですか? – Quantic