2012-11-08 60 views
1

下面的代码表示我正在写什么。要求是税务资料应该匹配正确的货币。我在下面的代码中写了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); 
      } 
     } 
    } 
} 

回答

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!"); 
} 

你也可以填充从数据库表中读取组合的字典,所以你不必硬编码他们。因人而异。

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); 
      } 
     } 
    } 
} 
+0

Dang,Stackoverflow因为我提交我的答案而失败......必须等待提交。 – RickL