gpt4 book ai didi

c# - 如何将通用 Tryparse 与枚举一起使用?

转载 作者:IT王子 更新时间:2023-10-29 04:14:03 25 4
gpt4 key购买 nike

我正在尝试构建从用户字符串获取的通用函数,并尝试将其解析为枚举值,如下所示:

private Enum getEnumStringEnumType(Type i_EnumType)
{
string userInputString = string.Empty;
Enum resultInputType;
bool enumParseResult = false;

while (!enumParseResult)
{
userInputString = System.Console.ReadLine();
enumParseResult = Enum.TryParse(userInputString, true, out resultInputType);
}
}

但是我得到:

The type 'System.Enum' must be a non-nullable value type in order to use it as parameter 'TEnum' in the generic type or method 'System.Enum.TryParse<TEnum>(string, bool, out TEnum)    .

错误意味着我需要为 resultInputType 声明一个特定的枚举?我怎样才能解决这个问题 ?谢谢。

最佳答案

TryParse method具有以下签名:

TryParse<TEnum>(string value, bool ignoreCase, out TEnum result)
where TEnum : struct

它有一个通用类型参数TEnum,它必须是一个struct,用于确定被解析的枚举类型。当您没有明确提供它时(就像您所做的那样),它将采用您提供的任何类型作为 result 参数,在您的情况下是 Enum 类型(而不是枚举本身的类型)。

请注意 Enum is a class (尽管它继承自 ValueType),因此它不满足 TEnumstruct 的要求。

您可以通过删除 Type 参数并为该方法提供一个与 上的通用类型参数具有相同约束(即 struct)的通用类型参数来解决此问题code>TryParse 函数。

那么试试这个,我将泛型类型参数命名为 TEnum:

private static TEnum GetEnumStringEnumType<TEnum>()
where TEnum : struct
{
string userInputString = string.Empty;
TEnum resultInputType = default(TEnum);
bool enumParseResult = false;

while (!enumParseResult)
{
userInputString = System.Console.ReadLine();
enumParseResult = Enum.TryParse(userInputString, true, out resultInputType);
}
return resultInputType;
}

要调用该方法,请使用:

GetEnumStringEnumType<MyEnum>();

关于c# - 如何将通用 Tryparse 与枚举一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10685794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com