我有一个静态类(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属性访问代码外部的数据吗?
有解决此问题的简便方法吗?我可以在可见的静态类中创建一个静态方法吗?
更多说明:在解决方案的其余部分中,有多个调用静态方法的实例-包括多个项目-都可以成功编译并运行。这是唯一给我这个问题的人。
谢谢, 约翰
答案 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。