2012-11-22 165 views
0

我用許多不同的方法創建了一個類庫(DLL)。並返回不同類型的數據(string string [] double double [])。因此,我創建了一個類我叫CustomDataType包含不同的數據類型,因此在庫中每個方法可以返回自定義類的對象的所有方法,並通過這種方式能夠回到我已經做了這樣的多種數據類型:返回不同的數據類型C#

public class CustomDataType 
{ 
    public double Value; 
    public string Timestamp; 
    public string Description; 
    public string Unit; 

    // special for GetparamterInfo 
    public string OpcItemUrl; 
    public string Source; 
    public double Gain; 
    public double Offset; 
    public string ParameterName; 
    public int ParameterID; 

    public double[] arrayOfValue; 
    public string[] arrayOfTimestamp; 

    // 
    public string[] arrayOfParameterName; 
    public string[] arrayOfUnit; 
    public string[] arrayOfDescription; 
    public int[] arrayOfParameterID; 
    public string[] arrayOfItemUrl; 
    public string[] arrayOfSource; 
    public string[] arrayOfModBusRegister; 
    public string[] arrayOfGain; 
    public string[] arrayOfOffset; 

}

庫中包含這樣的方法:

public CustomDataType GetDeviceParameters(string deviceName) 
    { 
     ...................... 
     code 



     getDeviceParametersObj.arrayOfParameterName; 

     return getDeviceParametersObj; 

    } 

    public CustomDataType GetMaxMin(string parameterName, string period, string maxMin) 
    { 
     .....................................code 



         getMaxMingObj.Value    = (double)reader["MaxMinValue"]; 
         getMaxMingObj.Timestamp   = reader["MeasurementDateTime"].ToString(); 
         getMaxMingObj.Unit    = reader["Unit"].ToString(); 
         getMaxMingObj.Description  = reader["Description"].ToString(); 

     return getMaxMingObj; 
    } 

    public CustomDataType GetSelectedMaxMinData(string[] parameterName, string period, string mode) 
    {................................code 

     selectedMaxMinObj.arrayOfValue   = MaxMinvalueList.ToArray(); 
     selectedMaxMinObj.arrayOfTimestamp  = MaxMintimeStampList.ToArray(); 
     selectedMaxMinObj.arrayOfDescription = MaxMindescriptionList.ToArray(); 
     selectedMaxMinObj.arrayOfUnit   = MaxMinunitList.ToArray(); 
     return selectedMaxMinObj; 

    } 

如圖所示THI不同的方法返回不同的數據類型,以及它爲我工作正常,但當我輸入DLL和要使用方法五isual studio將所有的數據類型都放在CustomDataType類中,作爲對所有方法的建議,即使返回的是不同的數據。這在下面的圖片中是不清楚的。正如我們從圖片中可以看到所有不同返回數據的建議,用戶可能會感到困惑,併爲某些方法選擇錯誤的返回數據。所以我的問題是如何改善這一點。所以Visual Studio建議每個方法的歸屬返回數據類型。

enter image description here

+4

考慮使用泛型類型。 – pylover

回答

5

你正在做一項根本錯誤的做法。

使每個方法的返回類型包含適當的數據。一些方法可能具有相同的返回類型;對於其他數據類型,可能只有一個返回該類型的方法。

在某些情況下,仿製藥可以幫助 - 例如,如果有一個返回「最小值和最大值」不同的方法,有時long,有時int,有時float或什麼的,那麼你可以有一個MinMax<T>類型。

這應該給你的提示:

和返回不同類型的數據

鑑於該方法自然地「返回不同類型的數據,」爲什麼,你會給他們所有的相同返回類型?

但把一切成一個數據類型只是前進的方向。 (這也是極其低效的,但是這是一個二階關注。)

下一步:擺脫那些公共領域,而是使用特性。您應該考慮一下您的某些類型是不可變的,以及您當前正在展示數組的位置,而不是隻顯示只讀集合。

0

你有點反對類型系統。我認爲你的CustomDataType類會導致比解決更多的問題。

您應該爲每個組合類,您將使用,或者使用out參數,以便能夠從方法返回多個值。

無法告訴Visual Studio根據返回的方法忽略某些屬性。

1

,如果你真的想使用的形式給出你有我會sugest使用動態

public dynamic GetDeviceParameters(string deviceName) 
    { 
     ...................... 
     code 



     getDeviceParametersObj.arrayOfParameterName; 

     return getDeviceParametersObj; 

    }