使用struct作为使用不同参数的方法的单个方法参数

时间:2017-05-01 21:08:25

标签: c#

我有一个包含枚举(键)和方法(值)的字典。所有这些方法都有所不同;其中一些使用参数,而其中一些不使用。为了将所有方法存储在一个字典中,我决定使用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;
    }
}

大局:

首先,我刚刚学会了功能词典的想法,我很乐意使用它,我觉得这很酷。根据链接到枚举的用户输入,我们执行适当的方法。出于上述原因,我想走这条路(如果可能的话),并避免一个非常大的开关声明。

1 个答案:

答案 0 :(得分:0)

如果您从用户界面获取参数,您可能会从string[]开始。然后需要决定转换参数的类型以及放置它的位置(intArg_1strArg_1)。由于这些方法本身并没有公开这些信息,因此您也需要将信息存储在某个地方。

如果你允许一点反思(如果这个输入直接来自用户,性能命中率不会很明显)你可能会有更简单的代码存储MethodInfo字典。您仍然需要将参数转换为正确的类型,但是反射允许您获取所需的参数计数及其类型。

作为奖励,目标方法可以是普通的旧C#方法,而不是要求它们接受struct