public Money Convert(string targetCurrency) { double rate; // currency value validation here: if (string.IsNullOrWhiteSpace(targetCurrency) == true && targetCurrency.Length != 3) { CustomExceptions.ExceptionThrower.ThrowImproperValueForCurrency(); } if (this.Currency.Equals("USD") == false && targetCurrency.ToUpper().Equals("USD") == false) { throw new Exception("Either of two currencies must be USD!!"); } if (this.Currency.Equals("USD")) { FileExchangeRateProvider provideExchangeRate = new FileExchangeRateProvider(); rate = provideExchangeRate.GetExchangeRate(this.Currency, targetCurrency.ToUpper()); return(new Money(this.Amount * rate, targetCurrency.ToUpper())); } else { FileExchangeRateProvider provideExchangeRate = new FileExchangeRateProvider(); rate = provideExchangeRate.GetExchangeRate(targetCurrency.ToUpper(), this.Currency); if (this.Amount == 0) { return(new Money(0, targetCurrency.ToUpper())); } return(new Money(this.Amount / rate, targetCurrency.ToUpper())); } }