带有问题的C#Noob:Int赋值不按预期工作

时间:2010-07-06 16:51:30

标签: c#

我在这里尝试一个简单的比较,分配不起作用,因为我想...这是代码,

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

编辑:代码已被删除所有功能,以便查看者更容易查看问题所在。我会很感激原始问题和其他任何代码的答案,这些代码会引起你的评论。

4 个答案:

答案 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中的比较并不总是像您期望的那样。基本类型的比较与复杂类型不同。如果比较整数,则可以比较它们的内容。如果你比较对象你正在比较对象的地址而不是它的内容。