error accountType是一个变量,但它被用作一个类型?

时间:2016-12-06 18:06:20

标签: c#

我正在尝试修复我的代码,但似乎无法绕过它。我有一个主要的抽象类帐户和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是一个变量,但它像一个类型一样使用”。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

accountType是一个包含Type值的变量。 该值在运行时会有所不同,每次调用方法时它都可能不同,但方法不会更改。

OfType<>扩展方法需要在编译时知道类型参数。 如果您使用具有不同参数的OfType<>,您的程序将根据该参数在底层调用不同的方法。

而不是OfType<>,您可以说_accountsOwned.Any(x => x.GetType() == accountType)。这种比较将在运行时完成。