不能在我的一生中引用另一个类的列表中的变量
Posted
技术标签:
【中文标题】不能在我的一生中引用另一个类的列表中的变量【英文标题】:Cannot for the life of me reference a variable inside of a list from another class 【发布时间】:2020-12-01 01:10:01 【问题描述】:我正在尝试设置一个变量 def,以便在定义类中包含定义的值 这是我要引用的类。
public class Definition
public string type get; set;
//need to get this to def in PlayButton event
public string definition get; set;
public string example get; set;
public string image_url get; set;
public object emoji get; set;
public class Root
public List<Definition> definitions get; set;
public string word get; set;
public string pronunciation get; set;
我需要在事件中包含 def 变量,但我不知道怎么做,为此我必须引用 DeserializedJSON
变量,因为 JSON 正在从那里解析到该类中,但我找不到方法从DeserializedJSON
获取它到defs
:
//Click PlayButton event
public async void PlayButton_Click(object sender, MouseButtonEventArgs e)
//Changing From Start Screen Grid To Quiz Screen Grid
QuizScreen.Visibility = Visibility.Visible;
StartScreen.Visibility = Visibility.Collapsed;
//Running game logic once to start game up
string word = RandomWord();
definitionUnformatted = await Define(word);
//Deserialising JSON
Root DeserializedJSON = JsonConvert.DeserializeObject<Root>(definitionUnformatted);
string def = //help here pls
DefinitionBox.Text = def;
感谢您的帮助,我只是希望这是一个简单的疏忽,我可以从中学习。
编辑:@crowcoder 要求提供 JSON 的示例
"definitions": [
"type": "noun",
"definition": "something shaped like a platter, in particular:",
"example": "dig out some old platters",
"image_url": null,
"emoji": null
,
"type": "noun",
"definition": "a large flat dish or plate for serving food.",
"example": "arrange the fruit on a serving platter",
"image_url": "https://media.owlbot.info/dictionary/images/kkkki.jpg.400x400_q85_box-0,0,360,360_crop_detail.jpg",
"emoji": null
],
"word": "platter",
"pronunciation": "ˈpladər"
【问题讨论】:
根据你的班级,你得到一个根对象,它有一个定义列表,你想要哪个? 你的Root
类有一个属性definitions
,它的类型是List<Definition>
,你想从这个列表的哪个项目中获取definition
的值?
您能否展示您尝试反序列化的 JSON 的相关示例?
@thatguy 我不确定你的意思,我希望将定义的值分配给“playbutton_click”中的变量
@AthulRaj 我想将“定义”类中的“公共字符串定义”的值放入“playbutton_click”中的变量中
【参考方案1】:
据我了解,您构建了一个猜词游戏。您从外部 API 获取单词的定义,并希望获取需要分配给 def
的第一个定义。
由于definitions
是List<Definition>
,因此使用索引器获取第一项。
string def = DeserializedJSON.definitions[0].definition;
或者,使用 Linq 的 First
方法,它的作用相同。
string def = DeserializedJSON.definitions.First().definition;
注意,您的Root
类包含List<Definition>
类型的属性definitions
,这意味着您也可以有多个定义或根本没有定义。如果有多个定义,您需要决定选择哪一个。
下面的代码会提前检查列表是否不是null
以及列表中是否有定义。否则,如果列表为 null
或访问第一个项目时,如果 没有定义,您将收到异常。
if (DeserializedJSON.definitions != null && DeserializedJSON.definitions.Count > 0)
def = DeserializedJSON.definitions[0].definition;
else
def = "No definition found";
【讨论】:
定义为空时崩溃。可以做 def = DeserializedJSON.definitions?.FirstOrDefault()?.definition ?? “没有定义” @AthulRaj 你是对的,谢谢。我添加了一个简单的null
检查,因为我不知道@Lewie 是否熟悉这些运算符。以上是关于不能在我的一生中引用另一个类的列表中的变量的主要内容,如果未能解决你的问题,请参考以下文章