C# 代码无法访问
对编程来说比较陌生,但我不明白为什么我的If语句不可访问。还有,返回计算的最佳方式是什么,以便我可以将其发回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
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?哎呀,乌烟瘴气的读者。雷德只是个剩菜。啊,好吧,我应该先把它存储到一个变量中。谢谢大家!这将有助于指定哪些语句是不可访问的。随机区域是怎么回事?我添加它是因为它使我更容易阅读该部分之外的代码。也许这让人困惑?我把它拿走了。