2017-10-04 5 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; 
} 

を、私はこれができたと確信していますより効率的に書くことができます。しかし、私は確信していません。これを書くにはどうすればよいでしょうか?

+2

'objectname'は' enum'た、列挙型の値は 'のdoSomething((int型)yourEnumValue、objectNameに、someOtherVar)に渡すことができれば、' – DiskJunky

+3

辞書 '辞書'にすべての文字列を入れて –

+2

または 'Array.IndexOf(stringArray、objectname)+1 ' –

答えて

6

最初のパラメータはobjectnameによって異なり、唯一のものであるならば、あなたはそのための辞書を使用して検討すべきでは:

// 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なければならない場合:あなたはより良い方法があることが適切である

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

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); 

そうでない場合。 ルックアップテーブルとしてスタティックディクショナリを作成する場合は、それを使用してマジックナンバーを取得します。

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); 
関連する問題