C#货币转换器:减少if语句的数量
到目前为止,我已经创建了一个货币转换器,可以在多种不同的货币之间转换。然而,为了转换货币,我使用了每种货币4个if语句(这样我可以在所有不同的货币之间转换)。这导致了20个if语句,看起来不是很干净或有效。下面是我的代码示例:C#货币转换器:减少if语句的数量,c#,performance,if-statement,C#,Performance,If Statement,到目前为止,我已经创建了一个货币转换器,可以在多种不同的货币之间转换。然而,为了转换货币,我使用了每种货币4个if语句(这样我可以在所有不同的货币之间转换)。这导致了20个if语句,看起来不是很干净或有效。下面是我的代码示例: if (currencyFrom == "B" && currencyTo == "U") { currencyConversion = doubleInput * 1.29; Console.WriteLine("$" + currenc
if (currencyFrom == "B" && currencyTo == "U")
{
currencyConversion = doubleInput * 1.29;
Console.WriteLine("$" + currencyConversion);
}
if (currencyFrom == "B" && currencyTo == "E")
{
currencyConversion = doubleInput * 1.14;
Console.WriteLine("€" + currencyConversion);
}
if (currencyFrom == "B" && currencyTo == "J")
{
currencyConversion = doubleInput * 145.10;
Console.WriteLine("¥" + currencyConversion);
}
if (currencyFrom == "B" && currencyTo == "C")
{
currencyConversion = doubleInput * 1.68;
Console.WriteLine("$" + currencyConversion);
}
有没有更好的方法来进行相同的计算,但不使用尽可能多的if语句
谢谢你的帮助
乔希像这样的事情应该行得通
if (currencyFrom == "B") {
switch (currencyTo) {
case "U":
currencyConversion = doubleInput * 1.29;
break;
case "E":
...
}
}
正如其他人所指出的,使用这样的条件逻辑并不能实现非常可伸缩的应用程序。交换机通常比使用多个if更整洁、更简单,但肯定会有更有效的方法来重新设计应用程序,使其更好地扩展。类似的方法应该可以工作
if (currencyFrom == "B") {
switch (currencyTo) {
case "U":
currencyConversion = doubleInput * 1.29;
break;
case "E":
...
}
}
正如其他人所指出的,使用这样的条件逻辑并不能实现非常可伸缩的应用程序。交换机通常比使用多个if更整洁、更简单,但肯定会有更有效的方法来重新设计应用程序,使其更好地扩展。您可以使用
字典
decimal currencyConversion;
string currencyFrom = "B";
string currencyTo = "E";
decimal doubleInput = 1000m;
Dictionary<string, decimal> dic = new Dictionary<string, decimal>();
dic.Add("BU", 1.29m);
dic.Add("BE", 1.14m);
dic.Add("BJ", 145.10m);
dic.Add("BC", 1.68m);
currencyConversion = doubleInput * dic[currencyFrom + currencyTo];
十进制转换;
字符串currencyFrom=“B”;
字符串currencyTo=“E”;
十进制双输入=1000m;
Dictionary dic=新字典();
dic.添加(“BU”,1.29米);
dic.添加(“BE”,1.14米);
dic.添加(“BJ”,145.10m);
dic.添加(“BC”,1.68米);
currencyConversion=doubleInput*dic[currencyFrom+currencyTo];
您可以使用字典
decimal currencyConversion;
string currencyFrom = "B";
string currencyTo = "E";
decimal doubleInput = 1000m;
Dictionary<string, decimal> dic = new Dictionary<string, decimal>();
dic.Add("BU", 1.29m);
dic.Add("BE", 1.14m);
dic.Add("BJ", 145.10m);
dic.Add("BC", 1.68m);
currencyConversion = doubleInput * dic[currencyFrom + currencyTo];
十进制转换;
字符串currencyFrom=“B”;
字符串currencyTo=“E”;
十进制双输入=1000m;
Dictionary dic=新字典();
dic.添加(“BU”,1.29米);
dic.添加(“BE”,1.14米);
dic.添加(“BJ”,145.10m);
dic.添加(“BC”,1.68米);
currencyConversion=doubleInput*dic[currencyFrom+currencyTo];
您可以使用字典存储转换率,然后使用更干净的函数进行计算
首先声明一个ConcurrentDictionary(这样您甚至可以安全地动态更新比率)
私有只读静态ConcurrentDictionary转换比率=新建ConcurrentDictionary();
您需要使用“从”和“到”货币对及其各自的比率填充转换比率
static MyClass()
{
ConversionRatios.TryAdd(new Tuple<string, string>("B", "U"), 1.29);
ConversionRatios.TryAdd(new Tuple<string, string>("B", "E"), 1.14);
ConversionRatios.TryAdd(new Tuple<string, string>("B", "J"), 145.10);
ConversionRatios.TryAdd(new Tuple<string, string>("B", "C"), 1.68);
}
静态MyClass()
{
转换率.TryAdd(新元组(“B”,“U”),1.29);
转换率.TryAdd(新元组(“B”,“E”),1.14);
转换率.TryAdd(新元组(“B”,“J”),145.10);
转换率.TryAdd(新元组(“B”,“C”),1.68);
}
然后你可以有一个非常简单的转换函数
private static double Convert(double doubleInput, string currencyFrom, string currencyTo)
{
double ratio;
if (ConversionRatios.TryGetValue(new Tuple<string, string>(currencyFrom, currencyTo), out ratio))
{
return doubleInput * ratio;
}
// Handle case when no ratio is found, either throw exception or do what ever.
throw new Exception("No ratio found.");
}
专用静态双转换(双双输入、字符串currencyFrom、字符串currencyTo)
{
双倍比率;
if(ConversionRatios.TryGetValue(新元组(currencyFrom、currencyTo、out ratio))
{
返回双输入*比率;
}
//当找不到比率时,处理case,抛出异常或执行任何操作。
抛出新异常(“未找到比率”);
}
您可以使用字典存储转换率,然后使用更干净的函数进行计算
首先声明一个ConcurrentDictionary(这样您甚至可以安全地动态更新比率)
私有只读静态ConcurrentDictionary转换比率=新建ConcurrentDictionary();
您需要使用“从”和“到”货币对及其各自的比率填充转换比率
static MyClass()
{
ConversionRatios.TryAdd(new Tuple<string, string>("B", "U"), 1.29);
ConversionRatios.TryAdd(new Tuple<string, string>("B", "E"), 1.14);
ConversionRatios.TryAdd(new Tuple<string, string>("B", "J"), 145.10);
ConversionRatios.TryAdd(new Tuple<string, string>("B", "C"), 1.68);
}
静态MyClass()
{
转换率.TryAdd(新元组(“B”,“U”),1.29);
转换率.TryAdd(新元组(“B”,“E”),1.14);
转换率.TryAdd(新元组(“B”,“J”),145.10);
转换率.TryAdd(新元组(“B”,“C”),1.68);
}
然后你可以有一个非常简单的转换函数
private static double Convert(double doubleInput, string currencyFrom, string currencyTo)
{
double ratio;
if (ConversionRatios.TryGetValue(new Tuple<string, string>(currencyFrom, currencyTo), out ratio))
{
return doubleInput * ratio;
}
// Handle case when no ratio is found, either throw exception or do what ever.
throw new Exception("No ratio found.");
}
专用静态双转换(双双输入、字符串currencyFrom、字符串currencyTo)
{
双倍比率;
if(ConversionRatios.TryGetValue(新元组(currencyFrom、currencyTo、out ratio))
{
返回双输入*比率;
}
//当找不到比率时,处理case,抛出异常或执行任何操作。
抛出新异常(“未找到比率”);
}
如果您真的想减少If语句的数量,并且您的要求允许使用互联网资源,那么我有一个非常简短的代码示例,它使用了Yahoo Finance
或异步
方式:
public async Task<decimal> ConvertCurrencyAsync(string from, string to)
{
var uriString = string.Format("http://finance.yahoo.com/d/quotes.csv?s={0}{1}=X&f=l1", from, to);
string response = await new WebClient().DownloadStringTaskAsync(uriString);
return decimal.Parse(response, System.Globalization.CultureInfo.InvariantCulture);
}
public async Task convertCurrencySync(字符串从,字符串到)
{
var uriString=string.Format(“http://finance.yahoo.com/d/quotes.csv?s={0}{1}=X&f=l1“,从,到);
字符串响应=等待新的WebClient()。下载StringTaskAsync(URI字符串);
返回decimal.Parse(响应、系统、全球化、文化信息、不变量文化);
}
有了这些代码,你就有了从任何货币兑换成任何货币的好处,你也有了当前的汇率。如果你真的想减少If语句的数量,并且你的要求确实允许使用互联网资源,我有一个非常简短的代码示例,它使用了雅虎财经
或异步
方式:
public async Task<decimal> ConvertCurrencyAsync(string from, string to)
{
var uriString = string.Format("http://finance.yahoo.com/d/quotes.csv?s={0}{1}=X&f=l1", from, to);
string response = await new WebClient().DownloadStringTaskAsync(uriString);
return decimal.Parse(response, System.Globalization.CultureInfo.InvariantCulture);
}
public async Task convertCurrencySync(字符串从,字符串到)
{
var uriString=string.Format(“http://finance.yahoo.com/d/quotes.csv?s={0}{1}=X&f=l1“,从,到);
字符串响应=等待新的WebClient()。下载StringTaskAsync(URI字符串);
返回decimal.Parse(响应、系统、全球化、文化信息、不变量文化);
}
使用该代码,您可以从任何货币兑换或转换为任何货币,并且您可以使用当前汇率。您可以将换算系数放入字典中,然后在那里查找配对。请看一看:至少,更改为使用“else if”。目前,您正在进行每一次比较,即使只有一次比较