带字符串/ bool的C#运算符

时间:2014-01-31 12:05:10

标签: c# unity3d

我仍然试图了解C#是如何工作的,现在我不知道如何使用C#Operator || (条件-OR)

void OnTriggerEnter(Collider positionCol) {
    if (positionCol.gameObject.tag == "pos_4")
    {
        Destroy(this.gameObject);  
        Debug.Log ("i hit and destroyed" + positionCol.tag);
    }
    else if (positionCol.gameObject.tag == "pos_3" || "pos_2" || "pos_1" )
    {
        Debug.Log ("i hit " + positionCol.tag);
    }
}

它一直告诉我,我不能使用||对于布尔和字符串。我怎样才能以最简单的方式做到这一点?

4 个答案:

答案 0 :(得分:4)

你需要扩展这样的条件:

 else if (positionCol.gameObject.tag == "pos_3" || 
          positionCol.gameObject.tag == "pos_2" || 
          positionCol.gameObject.tag == "pos_1")

或者可能使用switch

switch (positionCol.gameObject.tag)
{
    case "pos_4":
        Destroy(this.gameObject);  
        Debug.Log ("i hit and destroyed" + positionCol.tag);
        break;
    case "pos_3":
    case "pos_2":
    case "pos_1":
        Debug.Log ("i hit " + positionCol.tag);
        break;
    default:
        break;
}

答案 1 :(得分:1)

是的,positionCol.gameObject.tag == "pos_3"属于bool类型,而且 "pos_2""pos_1"是字符串,因此编译器不允许您使用 申请||在这些操作数上。这个是正常的。

以下内容有效

else if (positionCol.gameObject.tag == "pos_3" || positionCol.gameObject.tag = "pos_2" || positionCol.gameObject.tag = "pos_1" )

所以这就是你解决问题的方法。

答案 2 :(得分:1)

您应该按照其他答案中的说明分开您的陈述。或者,如果您需要检查更多字符串文字,并且需要更少的代码,则可以执行以下操作:

var values = new string[] {"pos_3", "pos_2", "pos_1"};
if(values.Contains(positionCol.gameObject.tag))
{
   ...
}

答案 3 :(得分:0)

C#||运算符应该应用于等式表达式。

这就是x == "a" || "b" || "c"不起作用的原因。

应该是:

x == "a" || x == "b" || x == "c"

由于"a"只是字符串文字||运算符无法应用于此情况。这就像说是“a”是真的吗?

x == "a"是一个布尔表达式,因为它可以是eval truefalse

例如:

string x = "a";
bool isTrue = x == "a"; // Yes, it's true!

使用现代方法,使用一些LINQ扩展方法有一个更优雅的解决方案:

    ...
    else if (new [] { "pos_3", "pos_2", "pos_1" }.Any(text => positionCol.gameObject.tag == text))
    {
        Debug.Log ("i hit " + positionCol.tag);
    }

Any(...)将检查某些数组项(或只是IEnumerable<T>的任何集合或实现)是否返回给定布尔表达式的true

Any的这个用例的其他示例:

// Any will return "true", as at least one number is greater than 0!
new int[] { 3, 44, 1, 5, 188 }.Any(number => number > 0);

详细了解Any following this link.