我在这里尝试一个简单的比较,分配不起作用,因为我想...这是代码,
int returnDateIndex(Paragraph para)
{
long firstIndex = 0;
for (int i = 0; i < para.Words.Count; i++)
{
if (para.Words[i].Text == "Second")
{
if (para.Words[i - 1].Text == "First")
{
firstIndex = para.Words[i].FirstSymbolPosition;
}
}
}
return (int)firstIndex;
}
我运行了我的调试器(在VS中),当调用该赋值时,右边的int等于50,但左边的int保持等于0.不知道我错过了什么。
此应用程序使用Abbyy FineReader 9.0 SDK,FirstSymbolPosition的文档说它返回只读Long
编辑:代码已被删除所有功能,以便查看者更容易查看问题所在。我会很感激原始问题和其他任何代码的答案,这些代码会引起你的评论。
答案 0 :(得分:3)
一个明显的错误是您希望返回条件匹配的第一个案例(因此 第一个索引变量名称) ,但你真的回到了他们匹配的最后点。这也很糟糕,因为这意味着你一直在寻找你的比赛。另一个是如果一个句子中的第一个单词是“Second”,你将尝试引用一个负面索引,这是非常糟糕的。试试这个:
int returnDateIndex(Paragraph para)
{
for (int i = 1; i < para.Words.Count; i++)
{
if (para.Words[i - 1].Text == "First" && para.Words[i].Text == "Second")
return (int)para.Words[i].FirstSymbolPosition;
}
return 0; // this is what your original code would have returned in a "not found" scenario
}
此代码修复了这两个错误,并完全支持您的分配问题。
答案 1 :(得分:1)
另外,您应该在分配break
后添加firstIndex
,否则如果稍后在循环中满足条件,则可能会被其他值覆盖。
答案 2 :(得分:1)
除了ChrisF所说的,这非常危险:
if (para.Words[i - 1].Text == "First")
没有检查以确保i大于或等于1,如果i等于0,那么你将从数组中索引。
答案 3 :(得分:0)
仅供参考:.net中的比较并不总是像您期望的那样。基本类型的比较与复杂类型不同。如果比较整数,则可以比较它们的内容。如果你比较对象你正在比较对象的地址而不是它的内容。