在父类数组中调用子类会在C#中出现一个名为“无法通过表达式引用类型”的错误

时间:2013-08-26 02:32:49

标签: c# arrays class subclass

我有一个名为“帐户”的课程。 这是我的代码:

// Account.cs
public partial class Account
{
    private Account.Credential _credential = new Account.Credential();

    public void Login(string UserID, string UserPW)
    {
        try
        {
            // do something

            _credential.CookieCollection = browser.CookieCollection;
            _credential.CookieContainer = browser.CookieContainer;
            _credential.UserID = "test";
            _credential.UserPW = "test";
        }
        catch (Exception err)
        {
            throw err;
        }
    }
}

// Credential.cs
public partial class Account
{
    public class Credential
    {
        // Model
        public CookieCollection CookieCollection { get; set; }
        public CookieContainer CookieContainer { get; set; }
        public string UserID { get; set; }
        public string UserPW { get; set; }
    }
}

// Form1.cs
public void ABC()
{
    Account[] _account = new Account[2];
    _account[0].Login("myID", "myPW");

    Account.Credential _cred = _account[0].Credential; ---> I get an error.
}

但是当我写一个mothod调用数组中的Account类并调用Credential的子类时,它会给我一个错误。

'Credential':不能通过表达式引用类型;请尝试'Account.Credential'。

因为,Login方法在Account Class中,我应该创建一个Account类数组。不是凭证类。

有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

由于错误试图告诉您,Credential类型是Account 类型的一部分;不是任何单个Account实例。

引用myAccounts[42].CredentialmikesAccount.Credential类型

是没有意义的

如果您想获得该用户的凭证,则需要引用Account类的字段或属性。
您可以写myAccounts[42]._credential,但_credential是私有的,这样会产生不同的错误 你应该建立一个公开的,可能是只读的财产。

答案 1 :(得分:0)

这种情况正在发生,因为Account.CredentialAccount的内部类型,并且不会像您使用它一样使用。尝试做的代码与尝试

类似
var str = String;

您需要初始化Account.Credential。一个简单的方法是在Account的ctor或new方法中使用Login()

我注意到您的代码会遇到更多问题 - 如果您想访问Account.Credential内声明的Account引用,则需要通过方法公开或更改访问修饰符。