Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 代码无法访问_C#_Visual Studio - Fatal编程技术网

C# 代码无法访问

C# 代码无法访问,c#,visual-studio,C#,Visual Studio,对编程来说比较陌生,但我不明白为什么我的If语句不可访问。还有,返回计算的最佳方式是什么,以便我可以将其发回 while (Reader.Read()) { if (Reader.NodeType == XmlNodeType.Element) { if (Reader.Name == "Amount") { if ("Amount" == "Gold" || value > 4

对编程来说比较陌生,但我不明白为什么我的If语句不可访问。还有,返回计算的最佳方式是什么,以便我可以将其发回

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;   
                }

            }
            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;
                }

            }
        }
    }
}
可能是因为我没有包含中断声明吗

Amount==Gold将永远不会计算为true,因为字符串是不同的。其他字符串比较也是如此。编译器减少了| |中的此错误,因此它可以看到以下内容:

if (value > 4999) {
    credit = 300;
    DiscountPercent = .20f;
} else if (value > 4999) {
    DiscountPercent = .15f;
} else if (false) {
    credit = 200;
}
编译器合理地得出结论,中间和底部的ifs是不可访问的

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

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;   
    }
}

我重新编写了您的代码,使其可编译:

    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();
                }                
            }
        }
    }

你到底想用这些做什么:数量=黄金?字符串金额永远不会等于字符串Gold,因此某些if语句的内容永远不会运行;在while语句中使用Reader.Read?哎呀,乌烟瘴气的读者。雷德只是个剩菜。啊,好吧,我应该先把它存储到一个变量中。谢谢大家!这将有助于指定哪些语句是不可访问的。随机区域是怎么回事?我添加它是因为它使我更容易阅读该部分之外的代码。也许这让人困惑?我把它拿走了。