C# 为什么这个代码不打印任何东西?

C# 为什么这个代码不打印任何东西?,c#,debugging,C#,Debugging,我正在尝试创建一个工作程序,您必须输入城镇、产品和数量,并输出总价 例如,Town1>Milk>2应该导致2。但由于某种原因,没有产出。有人能帮我看看错误吗 代码如下: Console.Write("Enter product: "); var product = Console.ReadLine().ToLower(); Console.Write("Enter town: "); var town = Console.ReadLine().ToLower(); Console.Write("

我正在尝试创建一个工作程序,您必须输入城镇、产品和数量,并输出总价

例如,Town1>Milk>2应该导致
2
。但由于某种原因,没有产出。有人能帮我看看错误吗

代码如下:

Console.Write("Enter product: ");
var product = Console.ReadLine().ToLower();
Console.Write("Enter town: ");
var town = Console.ReadLine().ToLower();
Console.Write("Enter quantity: ");
var quantity = double.Parse(Console.ReadLine());

if (town == "Town1")
{
    if (product == "Milk")
        Console.WriteLine(1.50 * quantity);
    if (product == "Water")
        Console.WriteLine(0.80 * quantity);
    if (product == "Whiskey")
        Console.WriteLine(4.20 * quantity);
    if (product == "Peanuts")
        Console.WriteLine(0.90 * quantity);
    if (product == "Chocolate")
        Console.WriteLine(2.60 * quantity);   
}
if (town == "Town2")
{
    if (product == "Milk")
        Console.WriteLine(1.40 * quantity);
    if (product == "Water")
        Console.WriteLine(0.70 * quantity);
    if (product == "Whiskey")
        Console.WriteLine(3.90 * quantity);
    if (product == "Peanuts")
        Console.WriteLine(0.70 * quantity);
    if (product == "Chocolate")
        Console.WriteLine(1.50 * quantity);
}
if (town == "Town3")
{
    if (product == "Milk")
        Console.WriteLine(1.90 * quantity);
    if (product == "Water")
         Console.WriteLine(1.50 * quantity);
    if (product == "Whiskey")
         Console.WriteLine(5.10 * quantity);
    if (product == "Peanuts")
         Console.WriteLine(1.35 * quantity);
    if (product == "Chocolate")
         Console.WriteLine(3.10 * quantity);
}
}}}

您正在设置
town=value.ToLower()
product=value.ToLower()
,这会使所有字符都小写,请更改以下行:

var town = Console.ReadLine().ToLower();
var product = Console.ReadLine().ToLower();
为此:

var town = Console.ReadLine();
var product = Console.ReadLine();
或者更改if语句条件以使用小写值作为比较

if (town == "town1")
{

对于加分,考虑使用<代码>字典< /> >,这也允许您指定不区分大小写的比较。

var townProductPrices = new Dictionary<string, Dictionary<string, double>>(StringComparer.CurrentCultureIgnoreCase) {
    ["Town1"] = new Dictionary<string, double>(StringComparer.CurrentCultureIgnoreCase) {
        ["Milk"] = 1.50d,
        ["Water"] = 0.80d,
        ["Whiskey"] = 4.20d,
        ["Peanuts"] = 0.90d,
        ["Chocolate"] = 2.60d,
    },
    ["Town2"] = new Dictionary<string, double>(StringComparer.CurrentCultureIgnoreCase) {
        ["Milk"] = 1.40d,
        ["Water"] = 0.70d,
        ["Whiskey"] = 3.90d,
        ["Peanuts"] = 0.70d,
        ["Chocolate"] = 1.50d,
    },
    //...
};


Console.Write("Enter product: ");
var product = Console.ReadLine().Trim();
Console.Write("Enter town: ");
var town = Console.ReadLine().Trim();
Console.Write("Enter quantity: ");
var quantity = double.Parse(Console.ReadLine().Trim());

var productPrices = townProductPrices[town];
var price = productPrices[product];
var total = price * quantity;
Console.WriteLine(total.ToString("c"));
var townProductPrices=新字典(StringComparer.CurrentCultureInoRecase){
[“Town1”]=新字典(StringComparer.CurrentCultureInogoreCase){
[“牛奶”]=1.50d,
[“水”]=0.80d,
[“威士忌”]=4.20d,
[“花生”]=0.90d,
[“巧克力”]=2.60d,
},
[“Town2”]=新字典(StringComparer.CurrentCultureInoRecase){
[“牛奶”]=1.40d,
[“水”]=0.70d,
[“威士忌”]=3.90d,
[“花生”]=0.70d,
[“巧克力”]=1.50d,
},
//...
};
控制台。写入(“输入产品:”;
var product=Console.ReadLine().Trim();
控制台。写入(“进入城镇:”;
var town=Console.ReadLine().Trim();
控制台。写入(“输入数量:”;
var quantity=double.Parse(Console.ReadLine().Trim());
var productPrices=城镇产品价格[城镇];
var价格=产品价格[产品];
var总额=价格*数量;
控制台写入线(ToString(“c”));

您不需要这么多匹配项。如果有任何问题,请尝试以下方法:

public class Program
{
    private static void Main(string[] args)
    {
        Console.Write("Enter product: ");
        var product = Console.ReadLine().ToLower();
        Console.Write("Enter town: ");
        var town = Console.ReadLine().ToLower();
        Console.Write("Enter quantity: ");
        var quantity = double.Parse(Console.ReadLine());

        var mapperData = new List<Mapper>()
                         {
                             new Mapper { TownName = "Town1", ProductInfo = "Milk", Quantity = 1.50 },
                             new Mapper { TownName = "Town1", ProductInfo = "Water", Quantity = 0.80 },
                             new Mapper { TownName = "Town1", ProductInfo = "Whiskey", Quantity = 4.20 },
                             new Mapper { TownName = "Town1", ProductInfo = "Peanuts", Quantity = 0.90 },
                             new Mapper { TownName = "Town1", ProductInfo = "Chocolate", Quantity = 2.60 },

                             new Mapper { TownName = "Town2", ProductInfo = "Milk", Quantity = 1.40 },
                             new Mapper { TownName = "Town2", ProductInfo = "Water", Quantity = 0.70 },
                             new Mapper { TownName = "Town2", ProductInfo = "Whiskey", Quantity = 3.90 },
                             new Mapper { TownName = "Town2", ProductInfo = "Peanuts", Quantity = 0.70 },
                             new Mapper { TownName = "Town2", ProductInfo = "Chocolate", Quantity = 1.50 },

                             new Mapper { TownName = "Town3", ProductInfo = "Milk", Quantity = 1.90 },
                             new Mapper { TownName = "Town3", ProductInfo = "Water", Quantity = 1.50 },
                             new Mapper { TownName = "Town3", ProductInfo = "Whiskey", Quantity = 5.10 },
                             new Mapper { TownName = "Town3", ProductInfo = "Peanuts", Quantity = 1.35 },
                             new Mapper { TownName = "Town3", ProductInfo = "Chocolate", Quantity = 3.10 },
                         };

        var matchingQuantity = mapperData.FirstOrDefault(i => i.TownName.ToString().ToLower() == town.ToLower().Trim()
                                                  && i.ProductInfo.ToString().ToLower() == product.ToLower().Trim()).Quantity;
        Console.WriteLine(matchingQuantity * quantity);
    }
}

public class Mapper
{
    public string TownName { get; set; }
    public string ProductInfo { get; set; }
    public double Quantity { get; set; }
}
公共类程序
{
私有静态void Main(字符串[]args)
{
控制台。写入(“输入产品:”;
var product=Console.ReadLine().ToLower();
控制台。写入(“进入城镇:”;
var town=Console.ReadLine().ToLower();
控制台。写入(“输入数量:”;
var quantity=double.Parse(Console.ReadLine());
var mapperData=新列表()
{
新映射器{TownName=“Town1”,ProductInfo=“Milk”,数量=1.50},
新地图绘制者{TownName=“Town1”,ProductInfo=“Water”,数量=0.80},
新地图绘制者{TownName=“Town1”,ProductInfo=“威士忌”,数量=4.20},
新映射程序{TownName=“Town1”,ProductInfo=“Peanuts”,数量=0.90},
新映射程序{TownName=“Town1”,ProductInfo=“Chocolate”,数量=2.60},
新映射器{TownName=“Town2”,ProductInfo=“Milk”,数量=1.40},
新地图绘制者{TownName=“Town2”,ProductInfo=“Water”,数量=0.70},
新地图绘制者{TownName=“Town2”,ProductInfo=“威士忌”,数量=3.90},
新映射程序{TownName=“Town2”,ProductInfo=“Peanuts”,数量=0.70},
新映射器{TownName=“Town2”,ProductInfo=“Chocolate”,数量=1.50},
新映射程序{TownName=“Town3”,ProductInfo=“Milk”,数量=1.90},
新地图绘制者{TownName=“Town3”,ProductInfo=“Water”,数量=1.50},
新地图绘制者{TownName=“Town3”,ProductInfo=“威士忌”,数量=5.10},
新映射程序{TownName=“Town3”,ProductInfo=“Peanuts”,数量=1.35},
新映射程序{TownName=“Town3”,ProductInfo=“Chocolate”,数量=3.10},
};
var matchingQuantity=mapperData.FirstOrDefault(i=>i.TownName.ToString().ToLower()==town.ToLower().Trim())
&&i.ProductInfo.ToString().ToLower()==产品.ToLower().Trim()).数量;
控制台写入线(匹配数量*数量);
}
}
公共类映射器
{
公共字符串名称{get;set;}
公共字符串ProductInfo{get;set;}
公共双数量{get;set;}
}

此外,您甚至可以为town和product创建枚举并使用它们。

感谢您的回复,但不幸的是,它仍然不起作用:(这是因为您的其他值被设置为较低()同样,您正在尝试将其与大写字符的值进行比较。对product和town执行相同的操作。谢谢!它工作正常!但是映射器,{get;set;}是什么呢Trim是什么意思?Mapper是一个有三个值的类。对于getter和setter,请在线阅读如何在c#中使用它们。Trim用于c#中的字符串以删除空空格。这并不能回答OPs问题,也不是建议它们的最佳实现感谢您的帮助!Dictionary、ToString和StringComparer是什么?CurrentCultureIgnoreCase mean?
字典
是一个使用泛型类型的
字典
类。请参阅。
ToString(“c”)
使用货币格式将双精度/十进制值转换为字符串。请参阅。
StringComparer.CurrentCultureIgnoreCase
指定字典在检索值时应使用当前用户/系统区域性并忽略大小写。对于新程序员来说,泛型类型可能有点高级,但此解决方案很好。I我不知道字典过载,谢谢!哦,你可能可以删除用户输入上的tolowers,并选择用trims替换它们?