在C# / XNA中比较字符串和对象

3

我有一个使用竖杠“|”分隔的XML文件。我有一个问题类中的代码将XML文件的“项”分成以下几个部分...

 List<string> questionComponents = newquestionString.Split('|').ToList<string>();

        questionString = questionComponents[0];
        apple = questionComponents[1];
        pear = questionComponents[2];
        orange = questionComponents[3];

        correctAnswer = Int32.Parse(questionComponents[4]);

我想将这些组件与在我的Game1类中实例化的对象(三种水果-苹果,梨子,橙子)进行比较。那么我该如何做呢?
一个朋友帮助我走到了这一步。我不知道如何做,经过在谷歌上搜索没有找到答案后,我决定向你这些可爱的人寻求帮助。
提前感谢: D
编辑:为了澄清事情...
我有三个名为苹果、梨和橙子的对象,我想将这些对象与XML文件中显示每个字符串组件的字符串相关联。问题字符串显示一个问题,[1] 答案 1,[2] 答案 2,[3] 答案 [3]。
然后我需要一种方法来将答案与游戏中吃掉的对象进行比较...

我有点困惑。你的苹果、梨和橙子是字符串(比如“apple”、“pear”、“orange”),但你想要与哪些对象进行比较呢? - PrettyPrincessKitty FS
4
如果你在XML文件中使用像Somequestion|apple|pear|orange这样的字符串,我99%确定你正在做某些非常错误的事情。 - doppelgreener
1
@Jonathan:这种格式在国际化中非常常见,因为它可以保持所有字符串的上下文,翻译人员可以根据需要提供更多或更少的替代方案,并且因为它可以干净地映射到每个 k/v 对的国际化系统。 - user79758
3个回答

2
假设您有某种橙色对象、某种对象和某种苹果对象,在每个类中重写ToString方法
如果您有一些通用的FruitAnswer对象,请考虑在构造函数中传递一个字符串,并在ToString方法中返回该字符串。
编辑:既然您现在已经澄清了,我会采用Jonathan的想法,拥有一个NameAnswer属性;然后您可以这样做:
if(object.Answer == questionComponent)
//do stuff

ToString方法并不会将对象转换为字符串。它只是返回一个用户定义的(如果你选择重写)对象的字符串 - 对于整数,它是“42”,对于布尔值,它是“true”或“false”。没有进行任何转换。


1
交替地给它一个“Name”属性。 - doppelgreener
我打算重写 ToString 方法,因为它似乎有些标准化。 - PrettyPrincessKitty FS
还好。但对于真实的、可触摸的物体来说,把一个水果变成字符串与获取它的名称似乎不太直观。 - doppelgreener
我认为这取决于他是只需要一个名称,还是其他事情。 - PrettyPrincessKitty FS
我不需要将对象转换为字符串,我需要将对象与在屏幕上显示的每个问题的答案相关联,以便当用户选择答案时,游戏可以根据水果知道它是否正确。 - Tom

1
根据您的编辑,听起来您所要做的就是基于从数据文件中获取的字符串查找一些具体对象?您不能使用字典吗,例如:
Fruit apple = new Apple();
Fruit orange = new Orange();

Dictionary<string,Fruit> map = new Dictionary<string,Fruit>();
map["apple"] = apple;
map["orange"] = orange;

然后稍后您可以获取用户的答案/输入:

string input = ...
Fruit result;
if(map.TryGetValue(input, out result)) {
  // `fruit` now holds the fruit object the user selected.
} else {
  // User input did not correspond to a known fruit.
}

但我仍然不确定我是否正确理解了你的问题。


用户控制一条蛇,根据屏幕上出现的特定问题的答案,蛇会吃苹果、梨子或橙子。我想做的就是将对象与 XML 文件中已分解的部分进行比较,然后将蛇所吃的答案与组件的第四部分正确答案进行比较。明白吗? - Tom

0

看起来可能字符串的范围是有限的,那么为什么不使用枚举形式的标识符,您可以从字符串中解析出来,并将该标识符设置到答案和水果中呢?

public enum AnswerType
{
  Apple,
  Pear,
  Banana
}

将答案存储在一个字典中,将枚举转换为整数作为键,再加上正确答案的ID,现在您可以知道每次选择了哪个答案,检查所吃水果的ID以及答案是否正确。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接