无法从其他类调用静态类中的静态方法

时间:2018-07-12 18:40:27

标签: c# class methods static

我有一个静态类(C#):

public static class PRRoles
{
    public static Dictionary<int, string> Roles
    {
        get
        {
            return DAPRRoles.GetPRRoles();
            //Dictionary<int, string> returnme = new Dictionary<int, string>();

            //returnme = DAPRRoles.GetPRRoles();

            //return returnme;
        }
    }
    public static bool IsPRRole(RoleType RT)
    {
        return Roles.ContainsKey((int)RT);
    }

}

这就是我所说的:

if(PRRoles.IsPRRole(RoleType.Contracts))

这是具有定义的方法的DAPRRoles类:

public class DAPRRoles
{
    public static Dictionary<int, string> GetPRRoles()
    {
        Dictionary<int, string> dicRoles = new Dictionary<int, string>();
        try
        {
            DataTable PRRoles = new WFDataLayer().GetPRRoles();
            foreach (DataRow r in PRRoles.Rows)
            {
                dicRoles.Add(int.Parse(r["roleid"].ToString()), r["description"].ToString());
            }
        }
        catch (Exception ex)
        {
            WriteLog(String.Format("GetPRRoles() threw Exception"));
            WriteLog(String.Format("Message: {0}", ex.Message));
            throw new Exception("JacobsWF.DAPRRoles.GetPRRoles Exception : " + ex.ToString());
        }

        return dicRoles;

    }
}

请注意,我必须键入方法名称,因为intellisense不会显示它。

这是上面RoleType的枚举定义,它在任何类之外定义,并且已在整个代码中成功使用。

public enum RoleType
{
    Undefined = 0,
    //Employee Types
    Employee = 1,
    JobManager = 2,
    Delegate = 3,
    JobManager2 = 4,
    //Purchase Request Buyer Types
    Buyer = 100, 
    BusinessAdmin = 101,
    Contracts = 102,
    Admin = 103,
    //Purchase Request Workflow Types
    [Description("Property Manager")]
    PropertyAdmin = 104,
    [Description("Contract Administrator")]
    ContractAdmin = 105,
    [Description("Office Director")]
    OfficeDirector = 106,
    [Description("Program Manager")]
    ProgramManager = 107,
    [Description("Financial Analyst")]
    FinancialAnalyst = 108,
    //Groups
    ADGroup = 1000,
    SharePointGroup = 2000,
    // External
    ExternalContact = 10000

}

IsPRRole对其他任何类,页面或方法都不可见,并且如果对该方法有任何调用,则无法构建应用程序。这是因为类的Roles属性访问代码外部的数据吗?

有解决此问题的简便方法吗?我可以在可见的静态类中创建一个静态方法吗?

更多说明:在解决方案的其余部分中,有多个调用静态方法的实例-包括多个项目-都可以成功编译并运行。这是唯一给我这个问题的人。

谢谢, 约翰

1 个答案:

答案 0 :(得分:1)

您使用类名调用静态方法。因此,如果我将您的代码简化为可编译的代码。我已经更新了我的repro,使其与您的代码更接近(通过包含DAPRRoles类和RoleType枚举)。您应该能够创建一个简单的控制台或WinForms或WPF应用程序,将其放入其中,通过调用PRRoles.IsPRRole(someInt);对其进行编译和逐步操作:

public static class PRRoles {
    public static Dictionary<int, string> Roles {
        get {
            return DAPRRoles.GetPRRoles();
        }
    }
    public static bool IsPRRole(int i){
        return Roles.ContainsKey(i);
    }
}

public class DAPRRoles {
    public static Dictionary<int, string> GetPRRoles() {
        Dictionary<int, string> dicRoles = new Dictionary<int, string>();
        dicRoles.Add(1, "One");
        dicRoles.Add(5, "five");
        return dicRoles;
    }
}

public enum RoleType {
    Undefined = 0,
    Employee = 1,
    JobManager = 2,
    Delegate = 3,
    JobManager2 = 4,
}

我可以这样(从我应用程序中的其他地方)调用它:PRRoles.IsPRRole(1);并返回true,如果通过2,则看到false。