我正试图使用name[key]语法来上调字典中键值对中的int的值。传入函数的是一个大小不一的字符串。我使用 foreach 方法对字符串进行迭代,但继续得到以下错误。
System.ArgumentException : Value does not fall within the expected range.
函数如下。
public static IDictionary<char, int> Count(string sequence)
{
IDictionary<char, int> Dna = new Dictionary<char, int>();
Dna.Add('A', 0);
Dna.Add('C', 0);
Dna.Add('G', 0);
Dna.Add('T', 0);
foreach(char c in sequence)
{
if(c != 'A' || c != 'C' || c != 'G' || c != 'T')
{
throw new ArgumentException();
}
++Dna[c];
}
return Dna;
}
堆栈跟踪识别了字符串被传入的那行和第20行,也就是++Dna[c]行。
我还在学习C#,只学了几天。
我试过几个贴子里的解决方案,但得到的是同样的错误。我需要多学些什么,才能理解这个概念?
这是来自另一个网站上的一个练习。
你的条件是错误的。应该是
if(c != 'A' && c != 'C' && c != 'G' && c != 'T')
{
throw new ArgumentException();
}
如果你想只计算字符,这等于任何从 A
, C
, G
或 T
并对超出这个范围的字符抛出一个错误,你应该使用 条件性逻辑和 &&
操作员而不是 条件逻辑OR ||
在 if
声明
foreach (var c in sequence)
{
if (c != 'A' && c != 'C' && c != 'G' && c != 'T')
{
throw new ArgumentException();
}
++Dna[c];
}
另外,你可以使用 continue
语句来处理下一次迭代的 foreach
襻
if (c != 'A' && c != 'C' && c != 'G' && c != 'T')
{
continue;
}