首页 >后端开发 >C++ >如何解决 C# 中缺少枚举泛型约束的问题?

如何解决 C# 中缺少枚举泛型约束的问题?

Susan Sarandon
Susan Sarandon原创
2025-01-19 06:02:08611浏览

How Can I Work Around the Lack of Enum Generic Constraints in C#?

解决C#中缺少枚举泛型约束的问题

C# 缺乏枚举泛型约束,这在为枚举创建扩展方法时带来限制。但是,有一些解决方法。

一种推荐的方法是使用UnconstrainedMelody库。该库允许指定诸如where T : struct, IEnumConstraint之类的“伪”约束,UnconstrainedMelody在构建后过程中将其转换为where T : struct, System.Enum

另一种解决方法是手动实现所需的功能。例如,考虑以下IsSet方法:

<code class="language-csharp">public static bool IsSet<T>(this T input, T matchTo)
    where T : struct // 不是枚举约束
{
    return (input & matchTo) != 0;
}</code>

当使用多个标志调用此方法时,它可能无法提供所需的行为,因为它只检查单个标志的存在。

为了解决这个问题,您可以定义一个附加方法:

<code class="language-csharp">public static bool HasFlags<T>(this T input, params T[] matchTo)
    where T : struct // 不是枚举约束
{
    foreach (var flag in matchTo)
    {
        if ((input & flag) == 0)
            return false;
    }

    return true;
}</code>

此方法迭代指定的标志,并且只有在所有标志都设置时才返回true。

命名约定

这些方法的适当命名约定取决于偏好。可能的选项包括:

  • Includes
  • Contains
  • HasFlag(或HasFlags)
  • IsSet

最终的决定可能因方法的具体上下文和用法而异。

以上是如何解决 C# 中缺少枚举泛型约束的问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn