>백엔드 개발 >C++ >C#에서 Enum 일반 제약 조건이 없는 문제를 어떻게 해결할 수 있나요?

C#에서 Enum 일반 제약 조건이 없는 문제를 어떻게 해결할 수 있나요?

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 라이브러리를 사용하는 것입니다. 라이브러리를 사용하면 빌드 후 프로세스 중에 UnconstrainedMelody가 where T : struct, IEnumConstraint로 변환하는 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를 반환합니다.

명명 규칙

이러한 메소드에 대한 적절한 명명 규칙은 선호도에 따라 다릅니다. 가능한 옵션은 다음과 같습니다.

  • 포함
  • 포함
  • HasFlag(또는 HasFlags)
  • IsSet

최종 결정은 구체적인 상황과 방법의 용도에 따라 달라질 수 있습니다.

위 내용은 C#에서 Enum 일반 제약 조건이 없는 문제를 어떻게 해결할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.