代码无法访问

时间:2015-05-15 02:17:35

标签: c# visual-studio

相对较新的编程,但我无法解决为什么我的If语句无法访问。还有什么是返回计算的最佳方法,以便我可以将其发送回去?

item1 == item2

可能是因为我没有包含休息声明吗?

2 个答案:

答案 0 :(得分:5)

"Amount" == "Gold"永远不会评估为true,因为字符串不同。其他字符串比较也是如此。编译器会将false||中删除,因此它会看到"以下内容:

if (value > 4999) {
    credit = 300;
    DiscountPercent = .20f;
} else if (value > 4999) {
    DiscountPercent = .15f;
} else if (false) {
    credit = 200;
}

编译器合理地断定中间和底部if无法访问。

要修复此代码,请阅读该值,并在比较中使用它:

if (Reader.Name == "Amount") {
    var amount = Reader.Value;
    if (amount == "Gold" || value > 4999) {
        credit = 300;
        DiscountPercent = .20f;     
    } else if (amount == "Silver" || value > 4999) {
        DiscountPercent = .15f;    
    } else if (amount == "Regular") {
        credit = 200;   
    }
}

答案 1 :(得分:2)

我重写了你的代码以使其编译:

    static void Main(string[] args)
    {
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.DtdProcessing = DtdProcessing.Parse;
        XmlReader Reader = XmlReader.Create("items.xml", settings);
        int value = 500;
        int credit = 0;
        var DiscountPercent = 0.1f;

        while (Reader.Read())
        {
            if (Reader.NodeType == XmlNodeType.Element)
            {
                if (Reader.Name == "Amount")
                {

                    if ("Amount" == "Gold" || value > 4999)
                    {
                        credit = 300;
                        DiscountPercent = .20f;

                    }
                    else if ("Amount" == "Silver" || value > 4999)
                    {
                        DiscountPercent = .15f;

                    }
                    else if ("Amount" == "Regular")
                    {
                        credit = 200;  //unreachable code detected
                    }
                    Reader.Read();
                }
                else if (Reader.Name == "Member")
                {
                    if ("Member" == "Gold" || value > 4999)
                    {
                        credit = 300;
                        DiscountPercent = .20f;
                    }
                    else if ("Member" == "Silver" || value > 4999)
                    {
                        DiscountPercent = .15f;
                    }
                    else if ("Member" == "Regular")
                    {
                        credit = 200;  //unreachable code detected
                    }
                    Reader.Read();
                }      
            }
        }
    }

我添加了一些建议,以帮助您弄清楚发生了什么......

    static void Main(string[] args)
    {
        XmlReaderSettings settings = new XmlReaderSettings();
        settings.DtdProcessing = DtdProcessing.Parse;
        XmlReader reader = XmlReader.Create("items.xml", settings);
        int value = 500;
        int credit = 0;
        var discountPercent = 0.1f;  //generally people use lower case for variables
        var amountType = "Gold";  //added this variable to replace constant
        var memberType = "Gold";  //added this variable to replace constant

        while (reader.Read())  //generally people use lower case for variables "reader.Read()"
        {
            if (reader.NodeType == XmlNodeType.Element)
            {
                if (reader.Name == "Amount")
                {
                    //two constant but different strings will never equal each other...
                    //, just like the integer 1 will never equal 2
                    if ("Amount" == amountType || value > 4999)  
                    {
                        credit = 300; 
                        discountPercent = .20f;

                    }
                    else if ("Amount" == amountType || value > 4999)
                    {
                        discountPercent = .15f;

                    }
                    else if ("Amount" == amountType)
                    {
                        credit = 200;  //no error, code is now reachable
                    }
                    reader.Read();
                }
                else if (reader.Name == "Member")
                {
                    if ("Member" == memberType || value > 4999)
                    {
                        credit = 300;
                        discountPercent = .20f;
                    }
                    else if ("Member" == memberType || value > 4999)
                    {
                        discountPercent = .15f;
                    }
                    else if ("Member" == memberType)
                    {
                        credit = 200;  //no error, code is now reachable
                    }
                    reader.Read();
                }                
            }
        }
    }
相关问题