簡體   English   中英

如何在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM