我有处理双数组的方法。我使用关键字params
提供双数组。我的问题有时候我也必须传递双打,我想对两种类型使用相同的方法。目前方法有签名
public void DoSomething(params double[][] arrays)
上面的方法定义适用于以下参数:
double [] array = new double []{2,3,5} ;
double [] anotherarray = new double []{7,8,10} ;
DoSomething (array, anotherarray) ;
我是传递对象然后在这个方法中使用try catch块并且我不知道它是正确的方法还是存在一些优雅的方法来处理这种情况,因为我可以将混合数据作为输入参数。
public void DoSomething(params object objs)
{
// for loop
try
{
var tempdata = (double) objs(loop index);
double[] data = new double[] { tempdata };
}
catch
{
var tempdata = (double []) objs(loop index);
double [] data = tempdata;
}
// do other opertaion
}
我想这样称呼:
double [] array = new double []{2,3,5} ;
double singlevalue = 10 ;
double [] anotherarray = new double []{7,8,10} ;
DoSomething (array, singlevalue, anotherarray) ;
答案 0 :(得分:2)
现在您已经举例说明了如何调用它,我怀疑使用动态类型可能是最简单的方法:
public void DoSomething(params object[] values)
{
foreach (dynamic value in values)
{
// Overload resolution will be performed at execution time
DoSomethingImpl(value);
}
}
private void DoSomethingImpl(double value) { ... }
private void DoSomethingImpl(double[] value) { ... }
如果您愿意,可以手动执行:
public void DoSomething(params object[] values)
{
foreach (object value in values)
{
if (value is double)
{
DoSomethingImpl((double) value);
// Or: DoSomethingImpl(new[] { (double) value });
}
else if (value is double[])
{
DoSomethingImpl((double[]) value);
}
...
}
}
我肯定不只是无条件地投射,然后抓住引发的异常。这是一种可怕的例外滥用行为。