C# 将结构用作使用不同参数的方法的单个方法参数
我有一个包含枚举(键)和方法(值)的字典。所有的方法都有不同的作用;其中有些使用参数,有些不使用。为了将所有方法存储在一个字典中,我决定使用struct作为每个方法的唯一参数。这些方法将使用的参数都是不同的(即,有些可能需要一个范围(int-min、int-max)或一个字符串(字符串格式))。最干净的方法是什么?现在我可以随意使用每种类型的两个参数,让方法调用方和方法来协调正确的用法。这是一种丑陋的做事方式,如果丑陋,通常会有更干净的方式。从做过类似事情的人那里寻找一些意见C# 将结构用作使用不同参数的方法的单个方法参数,c#,C#,我有一个包含枚举(键)和方法(值)的字典。所有的方法都有不同的作用;其中有些使用参数,有些不使用。为了将所有方法存储在一个字典中,我决定使用struct作为每个方法的唯一参数。这些方法将使用的参数都是不同的(即,有些可能需要一个范围(int-min、int-max)或一个字符串(字符串格式))。最干净的方法是什么?现在我可以随意使用每种类型的两个参数,让方法调用方和方法来协调正确的用法。这是一种丑陋的做事方式,如果丑陋,通常会有更干净的方式。从做过类似事情的人那里寻找一些意见 Dictionar
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;
}
}
字典
methodDictionary=new Dictionary如果您从用户界面获取参数,您可能会从一个字符串[]
开始。然后需要决定将参数转换为何种类型以及将其放置在何处(intArg_1
或strArg_1
)。由于这些方法本身不公开这些信息,所以您也需要将这些信息存储在某个地方
如果您允许进行一些反思(如果这一输入直接来自用户,则性能影响不会明显),那么您的字典中可能会有更简单的代码存储MethodInfo
s。您仍然需要将参数转换为正确的类型,但反射同样允许您获取所需的参数计数及其类型
作为奖励,目标方法可以是普通的旧C#方法,而不是要求它们接受struct
不使用mutablestruct
s。SLaks公平地说,没有任何东西会对其进行变异或允许其进行外部变异。为什么要将每个Func存储在字典中?最初的问题是什么?如果您的参数不一致,您不应该这样做。您建议的struct
非常糟糕。对于每个方法签名,您将向结构
添加更多字段,使其大小增长到荒谬的程度。即使您更改它以有效地合并不同的签名(即使用[FieldOffset]
),它仍然是维护的噩梦。有关更好的选项,请参见标记的副本。短版本:使用基本类型委托
作为值。在调用站点,您要么在编译时知道签名,要么不知道签名;如果是这样,只需将编译时强制转换包含到正确的委托类型即可。如果不是,则将参数放入数组中并调用DynamicInvoke()
。