繁体   English   中英

C#Noob出现问题:Int分配未按预期工作

[英]C# Noob with a question: Int assignment not working as expected

我在这里尝试进行简单的比较,分配无法正常工作,这是代码,

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。

编辑:去除了所有功能的代码,以使查看者更容易看到问题所在。 对于原始问题的解答,以及将您烦扰为注释的代码,我将不胜感激。

一个明显的错误是您希望返回条件匹配的第一种情况(因此返回 一个 Index变量名称),但实际上是返回它们匹配的最后一点。 这也很糟糕,因为这意味着您在寻找匹配项后会继续寻找。 另一个问题是,如果句子中的第一个单词是“第二个”,则您将尝试引用负索引,这是非常糟糕的。 尝试以下方法:

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
}

此代码不仅可以修复错误,还可以完全避免您的分配问题。

firstIndex您应该在分配firstIndex之后添加break ,否则,如果稍后在循环中满足条件,则可能会被另一个值覆盖。

除了ChrisF所说的,这还很危险:

if (para.Words[i - 1].Text == "First")

没有检查以确保i大于或等于1,如果i等于0,那么您将在数组之外进行索引。

仅供参考:.net中的比较并不总是像您期望的那样。 基本类型的比较不同于复杂类型。 如果比较整数,则会得到其内容的比较。 如果比较对象,则是在比较对象的地址,而不是内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM