解决 帮助枚举I've created

袜子1992

知名会员
已加入
2020年5月20日
留言内容
57
编程经验
Beginner
我以前从未使用过Enum,所以如果我做的是错误/错误的代码,请原谅我。我已经在我的患者课堂上创建了一个枚举。我创建了一个辅助方法,只要用户在系统中创建新患者,该方法就会被激活。我有两个问题。


C#:
public enum Gender
{
    Male,
    Female   
}

public static Gender ConvertToGender(string stringInput)
{
    var gender = stringInput.ToLower();
    switch (gende)
    {
        case "male":
            return Gender.Male;
        case "female":
            return Gender.Female;
      
    }
}

1.每当我调用helper方法时,我都希望它遍历直到用户输入其中一个"male" or "female"。然后,我希望将该输入保存在“添加患者”过程中的“性别”变量中。
2.创建患者对象的实例时,如何显示枚举?目前,我正在插入性别字符串变量,但其导致错误。"无法从字符串转换为Project.Patient.GenderChoice"

有人可以帮忙吗?我猜它很简单,但是我尝试了各种方法,但仍然没有运气。谢谢!
 
Last edited:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
The Enum class provides methods for converting numbers and strings to valid enum values. In your case, I'd get rid of that helper method and do the following. Firstly, declare the enum outside of any other type with an appropriate name and casing for the fields:
C#:
public enum Gender
{
    Male,
    Female
}
这个单词"Choice"那里没有生意。该值描述了患者的性别,他们没有选择。您在应用程序中选择值的事实是无关紧要的。

至于如何接收输入:
C#:
Gender gender;
bool inputIsValid;

do
{
    Console.WriteLine("Patient gender (Male/Female): ");

    var input = Console.ReadLine();

    inputIsValid = Enum.TryParse(input, true, out gender);
} while (!inputIsValid);
这将一直提示用户输入有效值,并且大小写不是问题。
 

袜子1992

知名会员
已加入
2020年5月20日
留言内容
57
编程经验
Beginner
The Enum class provides methods for converting numbers and strings to valid enum values. In your case, I'd get rid of that helper method and do the following. Firstly, declare the enum outside of any other type with an appropriate name and casing for the fields:
C#:
public enum Gender
{
    Male,
    Female
}
这个单词"Choice"那里没有生意。该值描述了患者的性别,他们没有选择。您在应用程序中选择值的事实是无关紧要的。

至于如何接收输入:
C#:
Gender gender;
bool inputIsValid;

do
{
    Console.WriteLine("Patient gender (Male/Female): ");

    var input = Console.ReadLine();

    inputIsValid = Enum.TryParse(input, true, out gender);
} while (!inputIsValid);
这将一直提示用户输入有效值,并且大小写不是问题。
谢谢!!!
 

袜子1992

知名会员
已加入
2020年5月20日
留言内容
57
编程经验
Beginner
嗨,我在代码中遇到了一个小问题,它允许我输入数字。如果我输入任何数字,它将带我到下一个控制台。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,501
地点
悉尼,澳大利亚
编程经验
10+
您可以更改此:
C#:
inputIsValid = Enum.TryParse(input, true, out gender);
对此:
C#:
inputIsValid = Enum.TryParse(input, true, out gender) &&
               Enum.IsDefined(typeof(Gender), gender);
and it will only accept 0 or 1, which are the numeric values for Gender.Male and Gender.Female respectively. If you want to exclude those numeric values too then there are a number of ways to do that, including this:
C#:
inputIsValid = Enum.TryParse(input, true, out gender) &&
               input.Equals(Enum.GetName(typeof(Gender), gender), StringComparison.CurrentCultureIgnoreCase);
That last part will get the label associated with the parsed value, if there is one, and perform a case-insensitive comparison between that and the original input. If they don't match then the input is rejected. This means that, even though 0 and 1 will be successfully parsed to Male and Female respectively, converting those labels to Strings and comparing them to the numeric input will not produce a match.
 
最佳 底部