Ronnie Overby
그는 물었다 11년 전
111

C # 의 값을 여러 이넘 전달하십시오 어떻게 해야 할까요?

39 others& 읽을 때 한다. 내가 보고 있는 c # 코드가 메서드입니다 받아들일 것이라는 이넘 값을 여러 단일 매개변수입니다. 난 항상 생각했다, 그러나 결코 간단한 일이 마치 다르거든요.

음, 이제 저는 가질 수 있는 방법을 알고 있지만, t # 39 don& 필요한 시점에

이 방법을 설정되었습니다 수락하려면 서명입니다 1. 2 의 값을 작동합니까 방법입니다.

  1. 정의하십시오 이넘

이를 위해서는 일종의 일이다. hr /&gt <; 싶다 내 특정 상황에 시스템.다요프위크 사용할 수 있으며, 다음과 같이 정의된다.

[Serializable]
[ComVisible(true)]
public enum DayOfWeek
{ 
    Sunday = 0,   
    Monday = 1,   
    Tuesday = 2,   
    Wednesday = 3,   
    Thursday = 4,   
    Friday = 5,    
    Saturday = 6
}

I want to be 벗어날 수 있는 한 명 이상의 값을 데이로프위크 내 메서드입니다. 이 특정 이넘 그대로 사용할 수 있습니까? How do I do 셨으며 3 위에 나열된?

ChaseMedallion
그는 6년 전 댓글을 달았습니다
1

이넘 깃발 아래 언급한 바와 같이 사용할 수 있습니다. [Ins 및 콜아웃 C # 이넘] 체크아웃하려고 할 수 있습니다 (http://www.codeducky.org/ins-outs-c-enums/) 에 대한 자세한 내용은 작업 플래그 이넘.

답변 10 개

이넘 정의할 때, 그냥 속성 값을 설정할 수 있는 것 [플래그], 이 두 권력을 작동합니까 this way.

아무것도 아닌 여러 값을 반군지역 로 변경, 함수.

예를 들면 다음과 같습니다.

[Flags]
enum DaysOfWeek
{
   Sunday = 1,
   Monday = 2,
   Tuesday = 4,
   Wednesday = 8,
   Thursday = 16,
   Friday = 32,
   Saturday = 64
}

public void RunOnDays(DaysOfWeek days)
{
   bool isTuesdaySet = (days & DaysOfWeek.Tuesday) == DaysOfWeek.Tuesday;

   if (isTuesdaySet)
      //...
   // Do your work here..
}

public void CallMethodWithTuesdayAndThursday()
{
    this.RunOnDays(DaysOfWeek.Tuesday | DaysOfWeek.Thursday);
}

자세한 내용은 MSDN& # 39 에 관한 문서가 열거도 유형은상위.

-

이에 대해 추가 편집하십시오 질문이예요

39, 있는 그대로 비춰 너회가 won& 사용할 수 있게 하고 싶은 일을 하지 않는 것이 주목적이라고 같은 배열로 / 수집 / params 어레이입니다. 여러 값을 전달할 수 있다고 말했다. 이넘 单捞磐啊 국기를 구문을 지정할 수 있다 플래그 (또는 언어, s # 39 는 고안되었습니다 that& 않은 방식으로 나쁘게 하다).

Reed Copsey
Andrew Siemer
그는 11년 전 댓글을 달았습니다
4

보이유 attaboy 이른다고 신속시작!

Denis Troller
그는 11년 전 댓글을 달았습니다
9

내 생각엔 스케쳐내 이를 사용하려면 값은 각 2 명, 단일 비트 값을 권력을 정의할 필요가 있다. 어떤 일이 발생합니까 에로남이네 너회가 통과 할 수 있는 비트 or 매개 변수에 값을 사용하여 확인 (비트 및 운영. 정의 잘있게나 않는 경우, 예를 들어, 값으로 1.2,4.8 상술합니다 문제가 됩니다.

Richard Anthony Hein
그는 11년 전 댓글을 달았습니다
1

그냥 혼자 속성용 설정을 자동으로 플래그에 doesn& # 39, 빗나갔다. 그냥 노력은 한 것 같습니다.

Matthew Scharley
그는 11년 전 댓글을 달았습니다
1

39, re right 및 you& 제거했을 애초부터. # 39 의 코드가 너무 Reed& 고정식입니다 백업하도록 그를 위해.

Reed Copsey
그는 11년 전 댓글을 달았습니다
0

고정식입니다. I forgot 입력할 수 있는. 감사합니다

Reed Copsey
그는 11년 전 댓글을 달았습니다
0

@monoxide: 내가 고정식입니다 it 동시에건간에 - 편집 내용을 재정의을 정말 미안하다.

Matthew Scharley
그는 11년 전 댓글을 달았습니다
2

괜찮서라 난 아직도 포지셔닝하십시오 hex 값을 사용하여 깃발 다는일은, 하지만 각 자신의 선택해제합니다 같은 더 많은 것 같다.

Reed Copsey
그는 11년 전 댓글을 달았습니다
0

@monoxide: # 39 - re going, 그것도 특히 hex you& 경우 유용하게 사용할 수 있다 할 수 있는 열거자를 요소가 많다. 좋은 점. # 39 건, 어쨌든요 개인 기본 스타일 / s it&.

Tillito
그는 9년 전 댓글을 달았습니다
0

솔루션이므로 해스플라그 (.) 를 사용하는 것이 더 좋은 것 같아요 이는 새로운 프레임워크 4.0. 보러 추가로 솔루션을 아래에있어.

Reed Copsey
그는 9년 전 댓글을 달았습니다
0

@Tillito: 예, 이 때문에 긴 여백, t # 39 에서 제작했습니다 .NET 4 에누마리아스플라그 didn& 타임코드가 당시.

제 생각에 더욱 세련된 솔루션을 사용하는 것이 해스플라그 ():

    [Flags]
    public enum DaysOfWeek
    {
        Sunday = 1,
        Monday = 2,
        Tuesday = 4,
        Wednesday = 8,
        Thursday = 16,
        Friday = 32,
        Saturday = 64
    }

    public void RunOnDays(DaysOfWeek days)
    {
        bool isTuesdaySet = days.HasFlag(DaysOfWeek.Tuesday);

        if (isTuesdaySet)
        {
            //...
        }
    }

    public void CallMethodWithTuesdayAndThursday()
    {
        RunOnDays(DaysOfWeek.Tuesday | DaysOfWeek.Thursday);
    }

Tillito
그는 9년 전 댓글을 달았습니다
5

이것이 가능한 충스러웠으니 프레임워크 4.0 을.

CoastN
그는 일 년 전 댓글을 달았습니다
0

이렇게 할 경우 알 수 있는 중요한 일은 또 있다. 새롭게 할 때 훨씬 더 유연도를 칠하려면 너회의 이넘 무중단으로. E. g.: 확인란 정의하십시오 사용할 경우 해당 프로그램을 실행할 수 있는 일, 이를 위해 노력하겠다고 운영까지도 진실이며당신이 길에서 그 위에 수행됨 코드를 읽을 수 없습니다.

그래서 대신 할 수 있어 이렇게: . 일 = '데이소프위크 새로운 데이소프위크 (); if (cb투스데이드체케드) 일 = 데이소프위크스투스데이. if (cb베드니스데이드체케드) 일 = 데이소프위크롬베드니스데이. ' .

39 의 두 번째 Reed& 내가 그 답이 있다. 그러나 이넘 만들 때 각각에 대한 값을 지정해야 합니다 수 있도록 일종의 비트 필드를 이넘 멤버. 예를 들면 다음과 같습니다.

[Flags]
public enum DaysOfWeek
{
    Sunday = 1,
    Monday = 2,
    Tuesday = 4,
    Wednesday = 8,
    Thursday = 16,
    Friday = 32,
    Saturday = 64,

    None = 0,
    All = Weekdays | Weekend,
    Weekdays = Monday | Tuesday | Wednesday | Thursday | Friday,
    Weekend = Sunday | Saturday,
    // etc.
}

Jacob
Jacob
그는 11년 전 댓글을 달았습니다
1

필요하면 도움이 된다 (예를 들어, re 판독값 you& 점검 데이소프위크 값을 # 39 한 that& # 39 의 데이터베이스에 저장된. 또 다른 요일 보다 잘 문서용으로 프로그래머, 이후 일부 열거하십시오 대신 월요일 부터 일요일.

Robert Cartaino
그는 11년 전 댓글을 달았습니다
3

39, & # 39 All& 명확성을 및 유지 관리, 꼭 이래야겠어요 작성합니다. 지난 일요일, 월요일, 화요일, 수요일, 목요일 금요일 Saturday&quot &quot 이넘 있다. # 39, & # 39, Weekdays& 비슷한 표기 및 사용 # 39, & # 39, 그리고 Weekend&.

Robert Paulson
그는 11년 전 댓글을 달았습니다
0

이 질문에 답해야 할 경우 정상입니다 직접 만들 수 있지만, 기존 데이소프위크 이넘 이넘 바꿀 수 없습니다

Richard Anthony Hein
그는 11년 전 댓글을 달았습니다
2

&Quot to&quot, 사용할 수 없습니다. . 합니다. 비트 비교 필요합니다. 값을 것가운데 미지정을 작동하지 않습니다.

&gt. 아니, 차라리 내 특정 상황 &gt. 시스템.다요프위크 사용할 것

[플래그] '로 사용할 수 없습니다' 시스템.다요프위크 열거도 제어할 수 있기 때문에 이 없다. '이렇게 하면 여러' 데이로프위크 프로파일링하려는 경우 투명지에 받아들이는 방법을 사용할 수 있는 '키워드' params)

void SetDays(params DayOfWeek[] daysToSet)
{
    if (daysToSet == null || !daysToSet.Any())
        throw new ArgumentNullException("daysToSet");

    foreach (DayOfWeek day in daysToSet)
    {
        // if( day == DayOfWeek.Monday ) etc ....
    }
}

SetDays( DayOfWeek.Monday, DayOfWeek.Sunday );

그렇지 않으면 직접 만들 수 있습니다 ' [플래그]' 열거도 기술한 대로, 기타 여러 가지 다양한 고객 환경에 따라 비트단위 주시노라 및 사용

Ronnie Overby
그는 11년 전 댓글을 달았습니다
2

39, 내가 왜, 내가 모르는 didn& # 39 의 params don& 것 같지는 않다. # 39, t 비트필드스 aren& 이넘 사용하여 할 수 있는 매우 유용합니다.

[Flags]
public enum DaysOfWeek
{
  Mon = 1,
  Tue = 2,
  Wed = 4,
  Thur = 8,
  Fri = 16,
  Sat = 32,
  Sun = 64
}

이 같은 번호를 지정해야 합니다 그 값을 저장할 수 있기 때문에, 그리고 증분할 비트단위 열었다.

그럼 그냥 이 방법을 정의하고 시행하십시오 이넘

public void DoSomething(DaysOfWeek day)
{
  ...
}

그리고 이 같은 일을 호츨

DoSomething(DaysOfWeek.Mon | DaysOfWeek.Tue) // Both Monday and Tuesday

이넘 값 중 하나를 사용하여 patran 같은 작업을 비트단위 확인란 포함됐는지 여부를 확인할 수 있습니다

public void DoSomething(DaysOfWeek day)
{
  if ((day & DaysOfWeek.Mon) == DaysOfWeek.Mon) // Does a bitwise and then compares it to Mondays enum value
  {
    // Monday was passed in
  }
}

Robert Paulson
그는 11년 전 댓글을 달았습니다
0

39, t doesn& 질문에 대답. 내 &quot, 특정 상황에 System.DayOfWeek&quot 사용합니다를 하고 싶다.

Tillito
그는 9년 전 댓글을 달았습니다
0

그러나 it& # 39. 정확히 내가 찾으러 왔다. 어쨌든 그래서 감사해요.

마크 네 이넘 를 [플래그] 속성. 그 밖에도 당신의 모든 값은 상호 배타적인 (t, 최대 비유하 can& 추가 다른 두 개의 값을 # 39) 등 네 경우엔 1.2,4.8,16.32,64

[Flags]
public enum DayOfWeek
{ 
Sunday = 1,   
Monday = 2,   
Tuesday = 4,   
Wednesday = 8,   
Thursday = 16,   
Friday = 32,    
Saturday = 64
}
받아들이는 방법을 사용할 경우 여러 명이 함께 사용할 수 있는 비트 or 이넘 데이로프위크 연산자 (). 예를 들면 다음과 같습니다.

MyMethod(DayOfWeek.Sunday|DayOfWeek.Tuesday|DayOfWeek.Friday)

, 와 있는지 확인하는 매개변수입니다 map_layer 비트단위 사용하여 특정 멤버 연산자 (&) 함께 멤버 틀렸다니까 확인.

if(arg & DayOfWeek.Sunday == DayOfWeek.Sunday)
Console.WriteLine("Contains Sunday");

Robert Paulson
그는 11년 전 댓글을 달았습니다
0

39, t doesn& 질문에 대답. 내 &quot, 특정 상황에 System.DayOfWeek&quot 사용합니다를 하고 싶다.

[Flags]
    public enum DaysOfWeek{

        Sunday = 1 << 0,
        Monday = 1 << 1,
        Tuesday = 1 << 2,
        Wednesday = 1 << 3,
        Thursday = 1 << 4,
        Friday =  1 << 5,
        Saturday =  1 << 6
    }

이 형식으로 security. 방법

메트로트나미 (데이소프위크스투스데이 데이소프위k.서스데이);

에노부토라리 구현하는 방법을 내려받습니다 옵션뿐 통과

private static void AddEntryToList(DaysOfWeek days, DaysOfWeek match, List<string> dayList, string entryText) {
            if ((days& match) != 0) {
                dayList.Add(entryText);
            }
        }

        internal static string[] EnumToArray(DaysOfWeek days) {
            List<string> verbList = new List<string>();

            AddEntryToList(days, HttpVerbs.Sunday, dayList, "Sunday");
            AddEntryToList(days, HttpVerbs.Monday , dayList, "Monday ");
            ...

            return dayList.ToArray();
        }

Richard Anthony Hein
그는 11년 전 댓글을 달았습니다
3

하지만 흥미로운 필요 없습니다.

Robert Paulson
그는 11년 전 댓글을 달았습니다
0

39, t doesn& 질문에 대답. 내 &quot, 특정 상황에 System.DayOfWeek&quot 사용합니다를 하고 싶다.

Ronnie Overby
그는 11년 전 댓글을 달았습니다
0

하지만, 정말 고마워, 로버트 don& t # 39 이 점을 아웃해야 할 때마다 그 답이 있다.

Robert Paulson
그는 11년 전 댓글을 달았습니다
0

내 오류가 있다는 것이 너무 많아 거의 중복 답변 @ronnie 거의 didn& t # 39, 실제로 질문에 대답.

Robert Paulson
그는 11년 전 댓글을 달았습니다
0

이 / 구문 분석 및 에누마리파스 @rony 이넘 ToString () 는 제대로 출력입니다 () 는 [플래그] 열거도 (deltamove you& # 39 의 버전 관리, re 신중한 열거도 물론)

Ronnie Overby
그는 11년 전 댓글을 달았습니다
0

39, 모든 사람이 없는 것 같습니다 - I don& @robert 게 있습니다. 그냥 투표 할 쑥덕거리던데

리드 코프시 올바르고 꼭 이래야겠어요 추가합니까 원본 게시물 내가그럴수도있지만, 난 그렇게 할 경우, 칸트, ll 질문하시리니 I& # 39 를 사용할 수 있습니다.

[플래그] 를 사용하는 게 아니라 그 이전 이넘. 내가 할 때 힘을 사용하여 명시적으로 변경하십시오 믿겠군 이넘 값을 두 값을 충돌을 피하기 위해 국기를. 안내선 플라그스타리버트 및 이넘 참조.

이 질문에 대한 대답, 도움으로 게시하기를.

  1. 플라그스타리버트 클래스 (비교치를 사용 및 사용하지 않는 [플래그] 속성)
  2. [이넘 플래그 속성용] [2]

I feel like it 꽤 잘 안다.

감사합니다.

[2]: # 8480 https://stackoverflow.com/questions/8447/enum-flags-attribute/8480

뭔가 보여줘야 하는 이 특성을 너희는너희가 찾고 있다.

[Flags]
public enum SomeName
{
    Name1,
    Name2
}

public class SomeClass()
{
    public void SomeMethod(SomeName enumInput)
    {
        ...
    }
}

Richard Anthony Hein
그는 11년 전 댓글을 달았습니다
3

39 won& 지정하지 않고, 2 의 거듭제곱으로 값을 빗나갔다.