2014-11-03 57 views
0

我正在查看一些代码。 VS将返回语句标记为冗余控制流跳转语句,并建议将其删除。什么是正确的语法?冗余控制流跳转语句

private async void TokenButton_Click(object sender, RoutedEventArgs e) 
    { 
     try 
     { 
      var accountType = _settings["account_type"]; 

      if (accountType.Equals(AccountTypeMicrosoft)) 
      { 
       this.Status.Text += "The original token is good for Live. No new token is needed.\n"; 
      } 
      else 
      { 
       // Get access token for the target service 
       if (!await GetAccessTokenForServiceAsync().ConfigureAwait(true)) 
       { 
        return; 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      this.Status.Text += "Exception caught: '" + ex.Message + "'."; 
      this.Status.Foreground = _errorBrush; 
     } 
    } 

回答

2

删除整个if并将其替换为:

await GetAccessTokenForServiceAsync().ConfigureAwait(true) 

你并不需要检查的结果,因为这发生在任何一种情况下,接下来的事情将是法的结束。

+1

的同时删除了整个事情,如果它是一个纯函数调用 – 2014-11-03 05:41:10

2

你的函数做的是这样的: if (condition) { return; } return; return语句是多余的。

+0

我想指出的是,如果'GetAccessTokenForServiceAsync()。ConfigureAwait (真)'有副作用,那么你仍然必须评估'病情'。 – 2014-11-03 05:42:22

0

您可以检查验证条件,第一,然后做处理类似

if (!await GetAccessTokenForServiceAsync().ConfigureAwait(true)) 
    { 
     return; 
    } 

    try { 
     var accountType = _settings["account_type"]; 

     if (accountType.Equals(AccountTypeMicrosoft)) 
     { 
      this.Status.Text += "The original ... "; 
     } 
    } 

    catch() {}