我在C#中的新手,但我知道我应该能想出解决办法。 我的搜索技巧没有任何给我一个直接的答案。
我有存储在字符串数组(它们已经从分割,分隔的列表)两个应用设置。
最后,我想运行的代码一个大块,在这两种环境条件。
条件是:
- 如果在阵列1(domattributes)存在设置,在各设定值的代码。
- 如果设置也在阵列2(intlattributes)存在,运行在包含任一阵列1或阵列中的每个设定值的代码
- 下面就是我试图做它用if / else语句打造出来的字符串数组,但它不工作。
我得到的错误
名称“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));
}...
需要声明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...
}
如果attributeIds是不是在你的范围,你可以把它放在你的范围。 之前你的if / else,把这个
string[] attributeIds = null;
然后,您可以访问它在foreach循环中,请确保您只分配给它,不要试图重新创建
attributeIds = new string[domattributeIds.Length + intlattributeIds.Length];
无论何时一对大括号内声明变量( {}
它是在该范围-它不是在其外部已知的。
这意味着你的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);
}
您在声明里面的if语句(并重新else语句)attributeIds。 为了访问的if / else范围以外的变量,声明它的父范围:
string[] attributeIds = null;
if (condition1) {
attributeIds = ...
} else {
attributeIds = ...
}
foreach (string attributeId in attributeIds) {
....
}