有没有办法在C#中做这样的事情?
public void DoSomething(string parameterA, int parameterB)
{
}
var parameters = ("someValue", 5);
DoSomething(parameters);
Run Code Online (Sandbox Code Playgroud)
Jam*_*iec 21
关闭,但不幸只使用对象(所以你得到很多拳击/拆箱)
public void DoSomething(params object[] parameters)
{
}
var parameters = new object[]{"someValue", 5};
DoSomething(parameters); // this way works
DoSomething("someValue", 5); // so does this way
Run Code Online (Sandbox Code Playgroud)
Eri*_*ert 14
不是今天,不是.我们目前正在为可能的假设未来版本的C#进行原型设计.
如果你能提供一个真正令人敬畏的理由,为什么你想要这个功能,这将是实际上从原型开始到可能的假设未来版本.什么是你激动这个功能的令人敬畏的场景?
(请记住,Eric对C#可能假设的未来版本的猜测仅用于娱乐目的,不应被解释为承诺将会有这样的版本,或者它将具有任何特定的功能集.)
spe*_*der 10
如果您第一次存储为委托,则无需使用反射,但它确实需要强大的委托声明.
public void DoSomething(string parameterA, int parameterB)
{
Console.WriteLine(parameterA+" : "+parameterB);
}
void Main()
{
var parameters = new object[]{"someValue", 5};
Action<string,int> func=DoSomething;
func.DynamicInvoke(parameters);
}
Run Code Online (Sandbox Code Playgroud)
...并且您可以忘记参数列表的编译时类型/健全性检查.可能是一件坏事.
你可以通过反射来调用它,但这会产生一些开销:
using System;
using System.Reflection;
namespace SO2744885
{
class Program
{
public void DoSomething(string parameterA, int parameterB)
{
Console.Out.WriteLine(parameterA + ": " + parameterB);
}
static void Main(string[] args)
{
var parameters = new object[] { "someValue", 5 };
Program p = new Program();
MethodInfo mi = typeof(Program).GetMethod("DoSomething");
mi.Invoke(p, parameters);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当然,如果您可以更改方法签名以获取数组,那么它也会起作用,但在我看来这看起来会更糟糕.
| 归档时间: |
|
| 查看次数: |
787 次 |
| 最近记录: |