gpt4 book ai didi

c# - 为可空枚举添加约束

转载 作者:太空狗 更新时间:2023-10-29 22:28:50 25 4
gpt4 key购买 nike

我正在编写一些枚举功能,并具有以下内容:

public static T ConvertStringToEnumValue<T>(string valueToConvert, bool isCaseSensitive)
{
if (typeof(T).BaseType.FullName != "System.Enum" && typeof(T).BaseType.FullName != "System.ValueType")
{
throw new ArgumentException("Type must be of Enum and not " + typeof (T).BaseType.FullName);
}

if (String.IsNullOrWhiteSpace(valueToConvert))
return (T)typeof(T).TypeInitializer.Invoke(null);

valueToConvert = valueToConvert.Replace(" ", "");

if (typeof(T).BaseType.FullName == "System.ValueType")
{
return (T)Enum.Parse(Nullable.GetUnderlyingType(typeof(T)), valueToConvert, !isCaseSensitive);
}

return (T)Enum.Parse(typeof(T), valueToConvert, !isCaseSensitive);
}

我这样调用它:

EnumHelper.ConvertStringToEnumValue<Enums.Animals?>("Cat");

我现在想将 T 的约束添加到枚举,例如(我从 Stackoverflow article 获得):where T : struct, IConvertible 但我遇到了 T 需要的问题能够接受可为空的枚举。错误消息说:

The type 'Enums.Animals?' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method

有没有办法做到这一点,还是我只需要依赖方法内部的运行时检查?

谢谢大家!

最佳答案

不,没有约束说“T 必须是一个值类型,包括可为 null 的值类型。”

但是,一个选择是将方法拆分为:

public static T ConvertStringToEnumValue<T>(...) where T : struct
public static T? ConvertStringToNullableEnumValue<T>(...) where T : struct

除此之外,每个方法的实现也会变得更简单。

当然,我们不知道您将如何使用此代码 - 但如果您要从非泛型方法中直接调用它,这将是我建议的方法.

当然,这仍然不会阻止有人用 T=int 或类似的东西调用它......你可能想看看 Unconstrained Melody以获得更严格的约束。

关于c# - 为可空枚举添加约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3811042/

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