【发布时间】:2012-07-03 14:01:55
【问题描述】:
我有一个BankAccount 课程。 FixedBankAccount 和 SavingsBankAccount 是从它派生的。
如果收到的对象不是派生对象,我需要抛出异常。我有以下代码。
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
还有比这更好的代码吗?
【问题讨论】:
-
没关系,改成if(acc.getType() == typeof(DBML_Project.BankAccount))
-
不清楚你想做什么。编译器不会让您或其他任何人向
accounts添加不是从BankAccount派生的对象,因此您无需检查。 -
@AseemGautam:如果
acc是派生类型,那将返回false。 -
@O.R.Mapper:会吗?抱歉,不知道!
-
@bhuvin 的答案从设计的角度来看是正确的,你不应该首先检查类型。