下面的代码代表我想写的内容。要求是税务资料应与正确的货币匹配。我在下面的代码中写了if条件。但是,通过数据库读取的税务概况超过100个。 我是否应该为所有100个条件写条件或者是否有更好的代码方式?
using System;
namespace MatchCondition
{
class MatchCondition
{
private const int TaxAmerica1 = 100;
private const int TaxAmerica2 = 200;
private const int TaxIndia1 = 300;
private const int TaxIndia2 = 400;
private const int Rupee =100;
private const int Dollar =200;
static void Main(string[] args)
{
try
{
int currencyId = int.Parse(args[0]);
int taxProfileId = int.Parse(args[1]);
if (currencyId == Rupee && (taxProfileId == TaxIndia1 || taxProfileId == TaxIndia2))
{
Console.WriteLine("All is well!");
}
else if(currencyId == Dollar && (taxProfileId == TaxAmerica1 || taxProfileId == TaxAmerica2))
{
Console.WriteLine("All is well!");
}
else if (taxProfileId == 0)
{
Console.WriteLine("All is well!");
}
else
{
Console.WriteLine("Mismatch Detected!");
}
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
}
}
}
答案 0 :(得分:3)
您可以将所有有效组合放入哈希表中,即IDictionary
并从那里开始。
例如:
var validCombinations = new Dictionary<int, List<int>>();
validCombinations.Add(Rupee, new List<int> { TaxIndia1, TaxIndia2 });
validCombinations.Add(Dollar, new List<int> { TaxAmerica1, TaxAmerica2 });
int currencyId = int.Parse(args[0]);
int taxProfileId = int.Parse(args[1]);
List<int> validTaxes;
if (taxProfileId == 0 ||
(validCombinations.TryGetValue(currencyId, out validTaxes) &&
validTaxes.Contains(taxProfileId)))
{
Console.WriteLine("All is well!");
}
else
{
Console.WriteLine("Mismatch Detected!");
}
您还可以使用从数据库表中读取的组合填充字典,因此您不必对其进行硬编码。 YMMV。
答案 1 :(得分:0)
您可以使用列表的映射字典作为替代
您可以像这样重构代码:
因此,您只需要为每组有效货币/税收资料添加到validCurrencies字典。请注意,这只是为了让您替代编写100个条件,您需要自己测试并使代码变得健壮。
using System;
using System.Collections.Generic;
namespace MatchCondition
{
class MatchCondition
{
private enum TaxProfileEnum
{
Default = 0,
America1 = 100,
America2 = 200,
India1 = 300,
India2 = 400,
}
private enum CurrencyEnum
{
Rupee = 100,
Dollar = 200,
}
static void Main(string[] args)
{
try
{
Dictionary<CurrencyEnum, List<TaxProfileEnum>> validCurrencies = new Dictionary<CurrencyEnum, List<TaxProfileEnum>>()
{
{ CurrencyEnum.Rupee, new List<TaxProfileEnum>() { TaxProfileEnum.India1, TaxProfileEnum.India2 } },
{ CurrencyEnum.Dollar, new List<TaxProfileEnum>() { TaxProfileEnum.America1, TaxProfileEnum.America2 } },
};
CurrencyEnum currency = (CurrencyEnum)int.Parse(args[0]);
TaxProfileEnum taxProfile = (TaxProfileEnum)int.Parse(args[1]);
if (taxProfile == TaxProfileEnum.Default)
{
Console.WriteLine("All is well!");
return;
}
List<TaxProfileEnum> validTaxes;
if (validCurrencies.TryGetValue(currency, out validTaxes) && validTaxes.Contains(taxProfile))
{
Console.WriteLine("All is well!");
return;
}
Console.WriteLine("Mismatch Detected!");
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
}
}
}