[英]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.