将字符串数组与枚举C#(UNITY)进行比较

时间:2018-05-31 03:50:49

标签: c# unity3d

如何将我使用的字符串数据与我的枚举

进行比较

我制作了这个枚举

class NotificationChannel < ApplicationCable::Channel
  def subscribed
    stream_from notification_stream
  end

  def receive(data)
    ActionCable.server.broadcast notification_stream, data.fetch('message')
  end

  private

  def notification_stream
    "#{params['namespace']}_stream"
  end

end

我将创建一个像这样的字符串数组

public enum BeadColor
{
    BLUE,
    RED,
    GREEN,
    NONE,
}

public BeadColor previousColor = BeadColor.NONE;

对枚举进行此操作

string str = {"P", "B", "T"};

所以,如果可以,我想使用public enum BeadColor { BLUE = "P", RED = "B", GREEN = "T", NONE, } 检查我的字符串enum

导致而不是采取正常的方式

BigRoadData.Contains(/*the enum BLUE for example*/)

我想这样做&#34;如果可能的话&#34;像这样

if(BigRoadData.Contains(str[0])){
   //print a
}

修改

CustomClass.cs

if(BigRoadData.Contains(/*the enum blue for example*/)){
   //print a
}

MainClass

我将在此称之为

public string BigRoadData = "";
public string[] strData = {"P  ,B  ,B  ,P  ,B  ,B  ,B  ,B  ,B  ,B  ,P  ,P  ,B  ,P  "};
public void MakeBigRoad(string data){

    BigRoadData = data;

    for(int i = 0; i < strData.Length; i++){
        BigRoadData += strData [i];
        BigRoadData += ",";
    }
}

public void ScoreBoardCondition(){

    if(BigRoadData.Contains(....)){

    }
}

修改

在我的 CustomClass.cs

CustomClass.ScoreBoardCondition();

2 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点。

1 。您可以使用EnumDictionary映射到字符串数组中的数据,然后使用Dictionary.ContainsKey(YourEnum.Value)

2 。您将枚举变量的名称与字符串数组中的值的名称相同,然后使用Enum.Parse进行此转换并进行比较。

3 。您可以为隐藏Contains的{​​{1}}类制作string扩展方法。此功能将BigRoadData.Contains(str[0])  枚举作为参数,允许您与其进行比较,而不是BeadColor

我将提供最后一种方法的示例。如果你想改用它们,你可以自己实现其他的。

枚举:

str[0]

扩展方法:

public enum BeadColor
{
    BLUE, //P
    RED,  //B
    GREEN, //T
    NONE,
}

扩展方法将“P”映射到public static class ExensionMethod { public static bool Contains(this string input, BeadColor cColor) { string[] str = { "P", "B", "T" }; if (cColor == BeadColor.BLUE) return input.Contains(str[0]); if (cColor == BeadColor.RED) return input.Contains(str[1]); if (cColor == BeadColor.GREEN) return input.Contains(str[2]); return false; } } ,将“B”映射到BeadColor.BLUE,将“T”映射到BeadColor.RED,并且可以使用{{检查颜色是否存在1}}枚举。

<强>用法

适用于字符串

BeadColor.GREEN

答案 1 :(得分:1)

您无法使用BeadColor作为public string BigRoadData = ""; void Start() { if (BigRoadData.Contains(BeadColor.BLUE)) { } } 的类型 您可以尝试string,但不建议使用 请参阅此问题和答案:https://stackoverflow.com/q/8588384/2025364

顺便说一句,连接这样的字符串非常糟糕: enum
请改用char(或BigRoadData += strData [i];)。