我正在尝试修复我的代码,但似乎无法绕过它。我有一个主要的抽象类帐户和4个子类:CurrentAccount,SavingsAccount,StudentAccount和YoungSavingsAccount 我有一个类Customer正在尝试创建一个帐户,它只能有一种类型的帐户。 Customer类有一个名为AccountsOwned的私有字段,它是一个Accounts数组。但我的问题是我不能使用Type类型的参数accountType。这是我在Customer Class中的函数代码:
public bool CreateAccount(Type accountType, int accountNumber, int sortCode, decimal balance)
{
// if user already has the same account type, cannot create account and return false
if (_accountsOwned.OfType<accountType>().Any()) // error here
return false;
// else create an account depending on the account type
else
{
if (accountType == CurrentAccount)
{
var account = new CurrentAccount(accountNumber, sortCode, balance);
return true;
}
else if (accountType == SavingsAccount)
{
var account = new SavingsAccount(accountNumber, sortCode, balance);
return true;
}
else if (accountType == StudentAccount)
{
Console.WriteLine("Enter Course Code");
var courseCode = Console.ReadLine();
Console.WriteLine("Enter Institution Name");
var institution = Console.ReadLine();
var account = new StudentAccount(accountNumber, sortCode, balance, courseCode, institution);
return true;
}
else if (accountType == YoungSavingsAccount)
{
var account = new YoungSavingsAccount(accountNumber, sortCode, balance);
return true;
}
else
return false;
}
}
我在第一个if语句的accountType下得到一个下划线。它说“accountType是一个变量,但它像一个类型一样使用”。有什么想法吗?
答案 0 :(得分:1)
accountType
是一个包含Type值的变量。
该值在运行时会有所不同,每次调用方法时它都可能不同,但方法不会更改。
OfType<>
扩展方法需要在编译时知道类型参数。
如果您使用具有不同参数的OfType<>
,您的程序将根据该参数在底层调用不同的方法。
而不是OfType<>
,您可以说_accountsOwned.Any(x => x.GetType() == accountType)
。这种比较将在运行时完成。