我有一个BankAccount类。 FixedBankAccountSavingsBankAccount是从中派生的。
如果接收的对象不是派生对象,则需要引发异常。我有以下代码。

IEnumerable<DBML_Project.BankAccount> accounts = AccountRepository.GetAllAccountsForUser(userId);
foreach (DBML_Project.BankAccount acc in accounts)
{
    string typeResult = Convert.ToString(acc.GetType());
    string baseValue = Convert.ToString(typeof(DBML_Project.BankAccount));

    if (String.Equals(typeResult, baseValue))
    {
        throw new Exception("Not correct derived type");
    }
}

namespace DBML_Project
{

public  partial class BankAccount
{
    // Define the domain behaviors
    public virtual void Freeze()
    {
        // Do nothing
    }
}

public class FixedBankAccount : BankAccount
{
    public override void Freeze()
    {
        this.Status = "FrozenFA";
    }
}

public class SavingsBankAccount : BankAccount
{
    public override void Freeze()
    {
        this.Status = "FrozenSB";
    }
}

} // namespace DBML_Project

有没有比这更好的代码了?

最佳答案

我将定义一个接口(interface)(类似于IAccettableBankAccount,但您知道您的域,因此您应该能够找到一个更好的名称),并让FixedBankAccount和SavingsBankAccount实现该接口(interface)。那么您的测试将仅仅是:

if (!acc is IAccettableBankAccount)
{
     throw new Exception("Not correct derived type");
}

10-07 19:45
查看更多