相对较新的编程,但我无法解决为什么我的If语句无法访问。还有什么是返回计算的最佳方法,以便我可以将其发送回去?
item1 == item2
可能是因为我没有包含休息声明吗?
答案 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();
}
}
}
}