我是C#的新手,但我知道我应该能够解决这个问题。我的搜索技巧也没有给我一个直接的答案。
我有两个存储在字符串数组中的应用程序设置(它们已从一个单独的列表中拆分)。
最终,我希望以两种设置为基础运行一大块代码。
条件是:
我收到错误
当前上下文中不存在名称'attributeIds'
我假设这是因为字符串数组实际上是在if / else语句中构建的,并且可能与尝试使用它的foreach方法的范围不同。任何帮助,将不胜感激。这是代码:
if (!string.IsNullOrEmpty(DomAttributesSetting))
{
if (!string.IsNullOrEmpty(IntlAttributesSetting))
{
string[] domattributeIds = DomAttributesSetting.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
string[] intlattributeIds = IntlAttributesSetting.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
string[] attributeIds = new string[domattributeIds.Length + intlattributeIds.Length];
Array.Copy(domattributeIds, attributeIds, domattributeIds.Length);
Array.Copy(intlattributeIds, 0, attributeIds, domattributeIds.Length, intlattributeIds.Length);
}
else
{
string[] attributeIds = DomAttributesSetting.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
}
foreach (string attributeId in attributeIds)
{
PersonAttribute personAttribute = (PersonAttribute)person.Attributes.FindByID(int.Parse(attributeId));
if (personAttribute == null)
{
personAttribute = new PersonAttribute(person.PersonID, int.Parse(attributeId));
}...
答案 0 :(得分:6)
您只需要声明attributeIds
一次,并且必须在if
语句之外声明它,以便它对方法的其余部分可见。
试试这个:
string[] attributeIds;
if (!string.IsNullOrEmpty(IntlAttributesSetting))
{
string[] domattributeIds = DomAttributesSetting.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
string[] intlattributeIds = IntlAttributesSetting.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
attributeIds = new string[domattributeIds.Length + intlattributeIds.Length];
Array.Copy(domattributeIds, attributeIds, domattributeIds.Length);
Array.Copy(intlattributeIds, 0, attributeIds, domattributeIds.Length, intlattributeIds.Length);
}
else
{
attributeIds = DomAttributesSetting.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
}
foreach (string attributeId in attributeIds)
{
// etc...
}
答案 1 :(得分:0)
如果attributeIds不在您的范围内,您可以将它放在您的范围内。在你的if / else之前,把这个
string[] attributeIds = null;
然后,你可以在foreach循环中访问它,确保你只是分配给它而不是再尝试创建它
attributeIds = new string[domattributeIds.Length + intlattributeIds.Length];
答案 2 :(得分:0)
每当你在一对大括号({}
)中声明一个变量时,它就在那个范围内 - 它在它之外是不可知的。
这意味着您的domattributeIds
,intlattributeIds
和attributeIds
变量仅在围绕它们的if
语句中已知(并且您正在创建attributeIds
范围内的第二个 else
变量。您需要在该范围之外声明它们,以便在这些范围之外使用它们:
string[] attributeIds;
if (!string.IsNullOrEmpty(IntlAttributesSetting))
{
...
attributeIds = new string[domattributeIds.Length + intlattributeIds.Length];
...
Array.Copy(intlattributeIds, 0, attributeIds, domattributeIds.Length, intlattributeIds.Length);
}
else
{
attributeIds = DomAttributesSetting.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
}
答案 3 :(得分:0)
您在if语句中声明了attributeIds(并在else语句中再次声明)。要在if / else作用域之外访问该变量,请在父作用域中声明它:
string[] attributeIds = null;
if (condition1) {
attributeIds = ...
} else {
attributeIds = ...
}
foreach (string attributeId in attributeIds) {
....
}