【发布时间】:2023-03-23 12:37:02
【问题描述】:
我有 3 行可以运行
int selectedOrgId;
foreach (Organization o in PD.orgs)
if (o.orgname == selectedOrgName)
selectedOrgId = o.orgid;
PD.cats.InsertOnSubmit(new Category {
orgid = selectedOrgId,
catname = newCatName
});
在我的程序上下文中,保证中间行,即循环,为selectedOrgId 设置一个值。但是,Visual Studio 会标记最后一行,因为
使用未分配的局部变量“selectedOrgId”
除了
还有什么方法可以解决这个问题int selectedOrgId = 69;
foreach (Organization o in PD.orgs)
if (o.orgname == selectedOrgName)
selectedOrgId = o.orgid;
PD.cats.InsertOnSubmit(new Category {
orgid = selectedOrgId,
catname = newCatName
});
??????
虽然它有效,但它似乎是一个不雅的解决方案,因为它涉及一个幻数。我想知道解决这个问题的正确 C# 风格。
编辑:
看看这里的一些讨论,我应该指定数据库中只有这样的orgid。我的foreach 声明应该这样写
foreach (Organization o in PD.orgs)
{
if (o.orgname == selectedOrgName)
{
selectedOrgId = o.orgid;
break;
}
}
感谢您向我展示了一些可以更好地完成这件事的方法!
【问题讨论】:
-
任何开发人员都可以做出的大胆声明
-
Visual Studio 对您的程序上下文一无所知...
-
This 声明最佳实践是让它失败,然后以错误的值静默运行。我建议,如果您想在循环后 selectOrgId 为 0 时执行异常。这将使您的代码更加有意。
-
它抱怨的原因是因为
selectedOrgId可能永远不会被设置,因为第 2 行的If语句。如果它永远不会被设置,那么当你尝试使用它时它将有一个未初始化的值它在第 3 行,这可能会导致问题。您需要确保在所有代码路径上都设置了一个值,或者将您的逻辑更改为仅在该变量具有已知有效值时才使用该变量。恕我直言,Visual Studio 正确地警告您此代码。 -
@FiredfromAmazon.com
that I'm not an idiot