0

现在在我的应用程序中,我正在使用这种结构

if (e->UserState->Equals(1)) {} //stuff 1
else if (e->UserState->Equals(2)) {} //stuff 2
... // e - EventArgs of .NET 4 WebClient class

我应该更好地定义

int n = (int)e->UserState;

并使用 switch()

switch(n)
{
  case 1:
  //stuff 1
  break;

  case 2:
  //stuff 2
  break;
}

它会以某种方式影响性能吗?(大约 15 个 e->UserState 的变体)

4

3 回答 3

3

(大约 15 个 e->UserState 的变体)

switch纯粹出于可读性目的,我会以形式编写它!至于性能,您可以通过分析进行检查,但我怀疑差异是否具有统计学意义。

于 2012-12-19T08:55:44.943 回答
1

Switch case 会更快(在这种情况下),因为编译器可以做很多技巧来让它更快,比如跳转表,其中值用作该表的索引或二进制搜索。
请注意,如果 'if' 中的条件仅包含变量和常量,编译器可能会执行相同的技巧,但如果您在条件中调用某些函数/方法,编译器必须按顺序进行每次检查以保持可能在此函数中产生的副作用。

于 2012-12-19T09:16:27.367 回答
0

性能不是这里的关键因素(因为它可以忽略不计)而是可读性。所以 etiher 使用switch甚至方法:

public static void Stuff(UserState state)
{
    // do your stuff here ...
}

现在您可以使用它(假设UserState是现有的枚举):

UserState state = (UserState)(int)e;
Stuff(state);
于 2012-12-19T09:04:38.383 回答