我不确定如何使用C#.Net 3.5实现我的想法。我有一个名为Common的静态类,它包含常用方法。其中一种方法是PrepareReportParameters。此方法接受字符串ReportParams并解析它以获取参数值。我将此ReportParams字符串加载到Dictionary中。然后验证是否存在所需的元素。我检查一下:
if (ReportParamList.ContainsKey("PAccount"))
{
ReportParamList.TryGetValue("PAccount", out PrimaryAccount);
}
其中PrimaryAccount是我的Common类中的静态变量。我可以在其他地方访问Common.PrimaryAccount。
尽管如此,访问报告参数的这个方法仍然可行但我希望将PrimaryAccount作为Common.ReportParameters.PrimaryAccount
进行访问。
这是问题,我不知道ReportParameters应该是什么类型,如何将所有报告参数添加到此类型?我该如何定义ReportParameters?这听起来是否可行或没有任何意义。请H L L P!
答案 0 :(得分:4)
听起来你基本习惯使用全局变量传递状态。这通常是一个非常糟糕的主意。
为什么您的方法只是返回主帐户值?然后可以将其传递给需要它的其他东西。
如果你发现自己有很多静态成员 - 特别是如果其他类正在获取可变的静态变量 - 请考虑是否有更多的OO设计可以应用。它更容易理解,更容易测试,也更容易维护。
编辑:好的,现在你有:public static class Common
{
public static int PrimaryAccount;
// other static fields
public static void PrepareReportParameters(string reportParameters)
{
// Code to set the fields
}
}
而不是使用普通类:
public class ReportParameters
{
public int PrimaryAccount { get; private set; }
// Other properties
private ReportParameters(int primaryAccount, ....)
{
this.PrimaryAccount = primaryAccount;
}
// Could use a constructor instead, but I prefer methods when they're going to
// do work
public static ReportParameters Parse(string report)
{
// Parse the parameter, save values into local variables, then
return new ReportParameters(primaryAccount, ...);
}
}
然后从代码的其余部分调用它,并将ReportParameters
引用传递给任何需要它的内容。
答案 1 :(得分:1)
您可以使用相关的强类型属性创建一个名为ReportParameters的类,并为Common提供一个静态实例吗?
答案 2 :(得分:0)
我不确定这是最好的设计。只有在调用PrepareReportParameters后才允许访问Common.PrimaryAccount,会有一定的“代码味道”。也许你会考虑一个实例类,传入构造函数中的参数?