获取两个变量及其顺序的函数无关紧要

Evg*_*ieT 0 c# variables function

抱歉,我无法在问题标题中更好地解释.我会在这里更好地定义我的问题.

这就是我正在做的事情 - 在我的游戏中,可以选择彼此使用物品.对于每对项目,游戏执行动作.

目前,游戏使用的变量有两个:"ItemUsed"和"ItemUsedOn".首先,游戏选择第一项 - 其id转到"ItemUsed",然后他选择第二项,它的id转到"ItemUsedOn".然后,有一个定义特定操作的空白.

一个简短的代码示例:

if (ItemUsed == "itm_cable")
{
    if (ItemUsedOn == "itm_towel")
        SubMain.ItemsMergedText = "To achieve what?";
    else if (ItemUsedOn == "itm_wet_towel")
        SubMain.ItemsMergedText = "No, water will damage it";
    else if (ItemUsedOn == "itm_glass")
        SubMain.ItemsMergedText = "I don't need to cut the cable";
}

if (ItemUsed == "itm_book_electronics")
{
    if (ItemUsedOn == "itm_towel")
        SubMain.ItemsMergedText = "Why?";
    if (ItemUsedOn == "itm_wet_towel")
        SubMain.ItemsMergedText = "No, water will damage the book";
    else if (ItemUsedOn == "itm_soap")
        SubMain.ItemsMergedText = "Wrong plan";
    else if (ItemUsedOn == "itm_hair")
        SubMain.ItemsMergedText = "It won't help";
}
Run Code Online (Sandbox Code Playgroud)

并且有很多这样的对.但是,这种方法存在问题.当两个项目组合时,它们的顺序无关紧要,例如"itm_toolbox"可以是"ItemUsed"而"itm_cable"可以是"ItemUsedOn",但也可以是相反的方式,结果将是相同的.怎么能实现这一目标?

如果出现以下情况,我确实尝试在每个"更大"中使用

else
    CombineItems(ItemUsedOn, "itm_book_edda");
Run Code Online (Sandbox Code Playgroud)

但这并不总是有效,我找不到原因.

所以,我正在寻找的是获得2个变量的函数:

void CombineItems(string Item1, string Item2)
Run Code Online (Sandbox Code Playgroud)

然后在这些情况下给出相同的结果:

if (Item1="Tomato")&&(Item2="Cucumber")
    Item3="Salad"

if (Item1="Cucumber")&&(Item2="Tomato")
    Item3="Salad"
Run Code Online (Sandbox Code Playgroud)

我的问题:有没有更简单的方法,没有使用这么多"如果"?

谢谢你,Evgenie

Dav*_*rno 5

我建议你自己创建一个eg UnorderedPair类型,它会覆盖.Equals和/或的行为==,这样:

new UnorderedPair("Tomato", "Cumcumber") == new UnorderedPair("Cucumber", "Tomato");
Run Code Online (Sandbox Code Playgroud)

然后,您可以将所有if语句缩减为简单字典:

combinedItems = new Dictionary<UnderedPair, string>
{
    [new UnorderedPair("Tomato", "Cumcumber")] = "Salad",
    [new UnorderedPair("Bread", "Filling")] = "Sandwich",
    ...
};
Run Code Online (Sandbox Code Playgroud)

并且您的确定文本的代码可以只是:

SubMain.ItemsMergedText = combinedItems[new UnorderedPair(ItemUsed, ItemUsedOn)];
Run Code Online (Sandbox Code Playgroud)