2017-10-04 1 views
0

나는 현재 다음과 같습니다 코드 조각이 :보다 효율적으로

switch (objectname) 
{ 
    case "objectbla": 
     DoSomething(1, objectName, someOtherVar); 
     break; 
    case "objectblabla": 
     DoSomething(2, objectName, someOtherVar); 
     break; 
    case "objectetc": 
     DoSomething(3, objectName, someOtherVar); 
     break; 
    case "objectanother": 
     DoSomething(4, objectName, someOtherVar); 
     break; 
    case "objectobj": 
     DoSomething(5, objectName, someOtherVar); 
     break; 
    default: 
     break; 
} 

을 자,이 스위치는 첫 번째 매개 변수가 두 번 카운트 업에 얼마나 반복적 인보고를, 나는 확신이 있었다 더 효율적으로 작성하십시오. 그래도 나는 잘 모르겠다. 이것을 작성하는 더 좋은 방법은 무엇입니까? 첫 번째 매개 변수는 objectname에 따라 다른 유일한 인 경우

+2

objectname'는'enum'이었다 글쎄'경우, 열거의 값은 해봐요 ((int)를 yourEnumValue, OBJECTNAME, someOtherVar) '에 전달 될 수있는,' – DiskJunky

+3

은 사전'사전 '에 모든 문자열을 넣어 –

+2

또는'Array.IndexOf (stringArray, objectname) +1 ' –

답변

6

, 당신은 그것을 위해 사전을 사용하는 것이 좋습니다 :

// you only have to set this up once 
var lookup = new Dictionary<string, int>() 
{ 
    ["objectbla"] = 1, 
    ["objectblabla"] = 2, 
    ["objectetc"] = 3, 
    ["objectanother"] = 4, 
    ["objectobj"] = 5, 
}; 


// actual logic 
if (lookup.TryGetValue(objectname, out var objectId)) 
{ 
    DoSomething(objectId, objectName, someOtherVar); 
} 
else 
{ 
    // objectname is not in the lookup dictionary 
} 

이것은 일반적인 생각이다. 조회 방식에 따라 다른 솔루션을 선택할 수도 있지만 사전은 가장 장황하지만 가장 유연한 방식으로 여기에서 수행 할 수 있습니다.

+0

좋은 찌르레기, 아주 잘 했어. –

1

그것에 대해 어떻게 switch,해야 할 경우 :

int aNumber; 
switch (objectname) 
{ 
    case "objectblabla": 
     aNumber = 1 
     break; 
    case "objectetc": 
     aNumber = 2 
     break; 
    case "objectanother": 
     aNumber = 3 
     break; 
    case "objectobj": 
     aNumber = 4 
     break; 
    default: 
     break; 
} 

DoSomething(aNumber, objectName, someOtherVar); 

그리고하지 않을 경우 :

string[] ListOfObjectNames = { "objectblabla", "objectetc", "objectanother" }; 
DoSomething(Array.IndexOf(ListOfObjectNames, objectname), objectName, someOtherVar); 
1

당신은 더 좋은 방법이 있다는 것을 정확합니다. 정적 사전을 찾아보기 테이블로 만드는 경우이를 사용하여 마법 번호를 가져옵니다.

static Dictionary<string, int> lookup= new Dictionary<string, int>() 
{ 
    { "objectbla",1}, 
    {"objectblabla", 2}, 
    etc. 
}; 

는 그런 다음 함수의 본문이된다 :

DoSomething(lookup[objectname], objectName, someOtherVar); 
당신은 또한 약자로, 그렇지 않으면 예외가 발생합니다, 사용 유효하지 않은 키의 가능성을 고려하는 코드를 추가해야합니다

.

1

저는 enum 메서드를 사용합니다.

enum objects 
{ 
    objectbla = 1, 
    objectblabla, 
    objectetc, 
    objectanother, 
    objectobj 
}; 

DoSomething((int)Enum.Parse(typeof(objects), objectName), objectName, someOtherVar);