我正在循环浏览一个二维数组的内容,该数组包含基因交叉的 Punnett Square 计算结果。我需要总结结果,以便用户可以轻松查看唯一实例。我可以通过将结果放入文本框中来完成此操作,但是当我尝试使用 ListBox 显示数据时,部分信息会丢失,即将 AaBBCc 类型数据转换为与特征直接相关的内容用户最初选择的。
这是该操作的主要代码块:
foreach (string strCombination in arrUniqueCombinations)
{
int intUniqueCount = 0;
decimal decPercentage;
foreach (string strCrossResult in arrPunnettSQ)
{
if (strCrossResult == strCombination)
{
intUniqueCount++;
}
}
decPercentage = Convert.ToDecimal((intUniqueCount*100)) / Convert.ToDecimal(intPossibleCombinations);
txtReport.AppendText(strCombination + " appears " + intUniqueCount.ToString() + " times or " + decPercentage.ToString() + "%."+ Environment.NewLine);
lstCrossResult.Items.Add(DecodeGenome(strCombination) + " appears " + intUniqueCount.ToString() + " times or " + decPercentage.ToString() + "%.");
}
为了将数据附加到文本框,我使用了这段代码,它工作得很好:
txtReport.AppendText(DecodeGenome(strCombination) + " appears " + intUniqueCount.ToString() + " times or " + decPercentage.ToString() + "%."+ Environment.NewLine);
给出结果: Trait 1 Het.,Trait 3 出现 16 次或 25%。
要将结果添加到列表框中,可以使用:
lstCrossResult.Items.Add(strCombination + " appears " + intUniqueCount.ToString() + " times or " + decPercentage.ToString() + "%.");
给出结果: AaBBCc 出现 16 次或 25%。
但是 strCombination 的内容是 AaBBCc,我需要将它翻译成“Trait 1 Het.,Trait 3”,我用这段代码完成了:
private string DecodeGenome(string strGenome)
{
string strTranslation = "";
int intLength = strGenome.Length;
int intCounter = intLength / 2;
string[] arrPairs = new string[intLength / 2];
//Break out trait pairs and load into array
for (int i = 1; i <= intLength; i++)
{
arrPairs[i / 2] = strGenome.Substring((i-1),2);
i++;
}
foreach (string strPair in arrPairs)
{
char chFirstLetter = strPair[0];
char chSecondLetter = strPair[1];
intCounter = intCounter - 1;
if (Char.IsUpper(chFirstLetter))
{
if (!Char.IsUpper(chSecondLetter))
{
if (intCounter > 0)
{
txtReport.AppendText(GetDescription(strPair.Substring(0, 1)) + " Het.,");
}
else
{
txtReport.AppendText(GetDescription(strPair.Substring(0, 1)));
}
}
}
else
{
if (!Char.IsUpper(chSecondLetter))
{
if (intCounter > 0)
{
txtReport.AppendText(GetDescription(strPair.Substring(0, 1)) + ",");
}
else
{
txtReport.AppendText(GetDescription(strPair.Substring(0, 1)));
}
}
}
}
return strTranslation;
}
这在文本框中显示没有问题,但是当我尝试将其作为项目放入列表框中时,它会将其变为空。而不是: “Trait 1 Het.,Trait 3 出现 16 次或 25%。” 我得到: “出现 16 次或 25%。”
我尝试将结果添加到 ArrayList,然后在处理完所有内容后填充列表框,但结果是相同的。
任何关于为什么列表框不接受翻译的 AaBBCc 信息的线索将不胜感激。