C# 将数组转换为单个元素以传递给函数
很难给出正确的标题,对此表示抱歉 我有一个不能用函数修改的类 字符串arg1,字符串arg2,…,字符串n 我有一个数组var arr=新字符串[n]{….} 如何将数组项转换为传递给函数f而无需写入C# 将数组转换为单个元素以传递给函数,c#,arrays,C#,Arrays,很难给出正确的标题,对此表示抱歉 我有一个不能用函数修改的类 字符串arg1,字符串arg2,…,字符串n 我有一个数组var arr=新字符串[n]{….} 如何将数组项转换为传递给函数f而无需写入 farr[0],arr[1],…,arr[n-1]?您可以考虑使用反射 在这种情况下,在调用时,您可以传递一组参数: methodInfo.Invoke(instanceOfClass, parametersArray) 请看下面的例子: 请注意,在本例中,根据文档,您有一个object[]数组
farr[0],arr[1],…,arr[n-1]?您可以考虑使用反射 在这种情况下,在调用时,您可以传递一组参数:
methodInfo.Invoke(instanceOfClass, parametersArray)
请看下面的例子:
请注意,在本例中,根据文档,您有一个object[]数组,因此您必须处理装箱/取消装箱,不知道所有这些工作是否真的有价值,只是以普通方式传递参数。您可能会考虑使用反射 在这种情况下,在调用时,您可以传递一组参数:
methodInfo.Invoke(instanceOfClass, parametersArray)
请看下面的例子:
请注意,在本例中,根据文档,您有一个object[]数组,因此您必须处理装箱/取消装箱,不知道所有这些工作是否真的值得,只需传递参数,通常情况下。您可能可以使用反射,但我认为这比完整编写的20个参数还要难看
如果您只需要在一个位置使用它,我会说只需使用20个参数调用它。如果您在多个地方需要它,请在您自己的程序中创建一个包含20个参数的函数,并在您自己的程序中随时随地调用该函数。您可能可以使用反射,但我认为这比完整编写的20个参数还要难看
如果您只需要在一个位置使用它,我会说只需使用20个参数调用它。如果您在多个地方需要它,请在您自己的程序中创建一个包含20个参数的函数,并在您自己的程序中的任何地方调用该函数。使用反射(如MethodInfo)将是您的选择之一 [1] 获取方法f的info伪代码:
MethodInfo[] methodInfos = typeof (TheClassWhereFuncfExists).GetMethods(BindingFlags.Public...);
[2] 使用linq获取f的方法信息
MethodInfo fmi= methodInfos.Where(item=> item.Name=="f").FirstOrDefault();
[3] 获得fmi后,可以通过编程方式调用它:
fmi.Invoke(...)
仅使用伪代码,未经过彻底测试。使用MethodInfo等反射将是您的选择之一 [1] 获取方法f的info伪代码:
MethodInfo[] methodInfos = typeof (TheClassWhereFuncfExists).GetMethods(BindingFlags.Public...);
[2] 使用linq获取f的方法信息
MethodInfo fmi= methodInfos.Where(item=> item.Name=="f").FirstOrDefault();
[3] 获得fmi后,可以通过编程方式调用它:
fmi.Invoke(...)
仅使用伪代码,未经过彻底测试。您应该能够使用反射,例如,如何指定N?我的意思是,它不可能是动态的,因为你有一个有N个参数的函数?@Esailija:嗯,我可以,但是使用反射编写函数比手动编写参数更难。当然,如果他们是一些我有20@Marco您可以定义自己的函数,该函数接受参数,并使用反射来传递参数。您应该能够使用反射来传递参数。例如,N是如何指定的?我的意思是,它不可能是动态的,因为你有一个有N个参数的函数?@Esailija:嗯,我可以,但是使用反射编写函数比手动编写参数更难。当然,如果他们是一些我有20@Marco你可以定义你自己的函数,它接受参数,并使用反射来传递它们。我没有想到这一点,你是对的。几小时后我会看一看,然后再给你回复。谢谢在我的具体案例中,参数为20可能不值得,但我只是想知道我是否需要花费更长时间的东西。我关心的是代码的可读性:写下arr[0],…,arr[19]既不好笑也不可维护。。。你觉得怎么样?@Marco:好吧,如果唯一的问题是可读性和可扩展性的话,那么值得看看这个解决方案。在其他情况下,只需保持有序的工作方式即可。@Marco老实说,代码的大小并不是可维护性的首要考虑因素。在我看来,复杂度和在修改代码时生成编译错误的能力要重要得多。正如Michel Keijzers所说,我会选择20个参数,因为反射消除了强类型并增加了复杂性。我没有想到这一点,你是对的。几小时后我会看一看,然后再给你回复。谢谢在我的具体案例中,参数为20可能不值得,但我只是想知道我是否需要花费更长时间的东西。我关心的是代码的可读性:写下arr[0],…,arr[19]既不好笑也不可维护。。。你觉得怎么样?@Marco:好吧,如果唯一的问题是可读性和可扩展性的话,那么值得看看这个解决方案。在其他情况下,只需保持有序的工作方式即可。@Marco老实说,代码的大小并不是可维护性的首要考虑因素。在我看来,复杂度和在修改代码时生成编译错误的能力更为重要。正如Michel Keijzers所说,我选择20个参数,因为反射消除了强类型并增加了复杂性。