Bar*_*xto 5 c# try-catch unassigned-variable
有这个代码,我不明白为什么如果在finally块中分配变量不理解它将始终被分配.我想我错过了一个无法分配货币的有效选项.如果你知道,理解为什么会很棒.非常感谢!
谢谢!
CurrencyVO currency;
try
{
if (idConnection.HasValue && idConnection != 0)
{
currencyConnection = client.GetConnection(idConnection.Value);
model.Connection = currencyConnection;
}
else
{
int providerUserKey = (int)Models.UserModel.GetUser().ProviderUserKey;
currencyConnection = client.GetConnection(providerUserKey);
}
currency = model.Currencies.SingleOrDefault(c => c.IdCountry == currencyConnection.idcountry) ?? new CurrencyVO();
}
catch
{
currency = new CurrencyVO();
}
finally
{
model.PublishedContainer.Currency = currency;
}
Run Code Online (Sandbox Code Playgroud)
finally块上发生错误.如果我把它从finally块中取出来像这样:
} catch {
currency = new CurrencyVO();
}
model.PublishedContainer.Currency = currency;
Run Code Online (Sandbox Code Playgroud)
它工作正常.
C#编译器执行的明确赋值跟踪不一定执行完整分析(在一般情况下这是不可能的) - 有一些规则限制编译器将执行的分析的复杂程度.finally这里有关于该块的规则记录在http://msdn.microsoft.com/en-us/library/aa691181.aspx:
对于表单的try语句stmt:
trytry-blockfinallyfinally-block
- 的明确赋值状态
v之初试块相同的明确赋值状态v之初语句.- 的明确赋值状态
v之初最后块相同的明确赋值状态v之初语句.- ...
因此,对于您的特定示例,由于currency未在try块的开头明确赋值,因此在块的开头处将其视为未明确赋值finally.
| 归档时间: |
|
| 查看次数: |
1117 次 |
| 最近记录: |