[英]How to convert a double [][] (jagged array) to a double[,] (matrix) in C#
[英]How to cast double or double array into double array always in C#
我有處理雙精度數組的方法。 我正在提供使用關鍵字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) ;
現在,您已經給出了如何調用它的示例,我懷疑使用動態類型可能是最簡單的方法:
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);
}
...
}
}
我絕對不會只是無條件地投射然后捕獲所引發的異常。 這是對異常的可怕濫用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.