我有一个包含枚举(键)和方法(值)的字典。所有这些方法都有所不同;其中一些使用参数,而其中一些不使用。为了将所有方法存储在一个字典中,我决定使用struct作为每个方法的唯一参数。方法将使用的参数都是不同的(即,一些可能需要范围(int min,int max)或字符串(字符串格式))。最干净的方法是什么?现在我有几个要随意使用的每种类型的参数,并将其留给方法调用者和方法来协调正确的用法。这是一种丑陋的做事方式,通常如果丑陋,那就更清洁了。寻找那些做过类似事情的人的一些意见!
Dictionary<Enums.MethodTypes, Func<MethodArguments, string>>
methodDictionary = new Dictionary<Enums.MethodTypes, Func<MethodArguments, string>
public struct MethodArguments
{
int intArg_1;
int intArg2_2;
string strArg_1;
string strArg_2;
double dblArg_1;
double dblArg_2;
public MethodArguments(int a1, int a2, string s1, string s2, double d1, double d2)
{
intArg_1 = a1;
intArg_2 = a2;
strArg_1 = s1;
strArg_2 = s2;
dblArg_1 = d1;
dblArg_2 = d2;
}
}
大局:
首先,我刚刚学会了功能词典的想法,我很乐意使用它,我觉得这很酷。根据链接到枚举的用户输入,我们执行适当的方法。出于上述原因,我想走这条路(如果可能的话),并避免一个非常大的开关声明。
答案 0 :(得分:0)
如果您从用户界面获取参数,您可能会从string[]
开始。然后需要决定转换参数的类型以及放置它的位置(intArg_1
或strArg_1
)。由于这些方法本身并没有公开这些信息,因此您也需要将信息存储在某个地方。
如果你允许一点反思(如果这个输入直接来自用户,性能命中率不会很明显)你可能会有更简单的代码存储MethodInfo
字典。您仍然需要将参数转换为正确的类型,但是反射允许您获取所需的参数计数及其类型。
作为奖励,目标方法可以是普通的旧C#方法,而不是要求它们接受struct
。