簡體   English   中英

在 if 語句中比較枚舉

[英]Compare Enums in if statement

我想在 ifs 語句上比較一些枚舉,這就是我的意思,但這不起作用。 基本上我想看看受傷是否與枚舉相同,所以如果受傷正在流血,您需要包扎等。如果您需要任何其他信息,請告訴我。

static string injuries = GetInjuriesName(GetInjuries(closestPlayer));
EPedInjuries result;
if (Enum.TryParse(injuries, out result) && result == EPedInjuries.Overdose)
{
.....
}
else if (Enum.TryParse(injuries, out result) && result == EPedInjuries.GunShotWound)
{
....
}
....


public enum EPedInjuries
{
    OpenFracture,
    GunShotWound,
    Fever,
    BrokenLeg,
    BrokenArm,
    BrokenRib,
    Overdose,
    .....
}

    public static EPedInjuries GetInjuries(Ped ped)
    {
        Ped = ped;
        int num = API.Common.Random.Next(0, 101);
        if (num >= 0 && num <= 37)
        {
            return EPedInjuries.Overdose;
        }
        if (num > 37 && num <= 55)
        {
            return EPedInjuries.GunShotWound;
        }
        if (num > 55 && num <= 72)
        {
            return EPedInjuries.CardiacArrest;
        }
        ....
}


public static string GetInjuriesName(EPedInjuries injuries)
{
    string result = string.Empty;
    switch (injuries)
    {
        case EPedInjuries.Overdose:
            result = "~r~Overdose";
            break;
        case EPedInjuries.GunShotWound:
            result = "~r~Gunshot Wound";
            break;
        case EPedInjuries.CardiacArrest:
            result = "~r~Cardiac Arrest";
            break;
        ....
    }
    return result;
}

GetInjuries方法已返回您要比較的枚舉類型。 正如@Johnny Mopp 指出的那樣,您正在獲取枚舉,將其轉換為某個字符串,只是為了嘗試將其轉換回枚舉

做就是了

EPedInjuries result = GetInjuries(closestPlayer);
if (result == EPedInjuries.Overdose)
{
.....
}
else if (result == EPedInjuries.GunShotWound)
{
....
}

您的GetInjuriesName返回的字符串不是正確的枚舉值, Enum.TryParse無法解析它並返回false

var injuries = GetInjuriesName(EPedInjuries.Overdose);
Console.WriteLine(injuries); //prints "~r~Overdose"
Console.WriteLine(Enum.TryParse(injuries, out EPedInjuries result)); // prints "False"

只需引入兩個字段/變量,一個用於名稱,一個用於傷害枚舉值:

EPedInjuries injury = GetInjuries(closestPlayer)
string injuryName = GetInjuriesName(injury);

並使用第一個來處理邏輯:

if(injury == EPedInjuries.Overdose)
{
    ....
} 
.....

我相信你會從其他地方收到字符串,所以你想轉換這就是你有 GetInjuriesName 方法的原因。 對我來說,你應該只打開你收到的琴弦。

為了修復此代碼,您應該從字符串中刪除“~r~”,以便它匹配任何枚舉類型。

此外,枚舉不能是 null,因此您將始終獲得第一個默認值。

public static string GetInjuriesName(EPedInjuries injuries)
{
    string result = string.Empty;
    switch (injuries)
    {
        case EPedInjuries.Overdose:
            result = "Overdose";
            break;
        case EPedInjuries.GunShotWound:
            result = "Gunshot Wound";
            break;
        case EPedInjuries.CardiacArrest:
            result = "Cardiac Arrest";
            break;
    }
    return result;
}

然后 TryParse 將工作並產生一個包含在枚舉中的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM