0

我用许多不同的方法创建了一个类库(DLL)。并返回不同类型的数据(字符串字符串 [] 双双 [])。因此,我为包含不同数据类型的所有方法创建了一个名为 CustomDataType 的类,因此库中的每个方法都可以返回自定义类的对象,这样就能够返回多种数据类型,我已经这样做了:

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;

    }

如图所示,不同的方法返回不同的数据类型,它对我来说很好,但是当我导入 DLL 并想要使用这些方法时,Visual Studio 会显示 CustomDataType 类中的所有数据类型作为所有方法的建议,即使返回不同数据。如下图所示。正如我们从图片中看到的,所有不同的返回数据的建议,用户可能会感到困惑并为某些方法选择错误的返回数据。所以我的问题是如何改进这一点。所以 Visual Studio 只建议每种方法的所属返回数据类型。

在此处输入图像描述

4

3 回答 3

5

你采取了一种根本错误的方法。

将每个方法的返回类型设为包含相应数据的类型。一些方法可能有相同的返回类型;对于其他数据类型,可能只有一个返回该类型的方法。

在某些情况下,泛型可能会有所帮助 - 例如,如果您有不同的方法返回“最小值和最大值”,有时long,有时int,有时float或其他,那么您可以有一个MinMax<T>类型。

这应该给你提示:

并返回不同类型的数据

鉴于这些方法自然会“返回不同类型的数据”,你为什么要给它们全部相同的返回类型?

但是将所有内容都归入一种数据类型根本不是前进的方向。(它的效率也极低,但这是次要问题。)

下一步:摆脱那些公共字段,并改用属性。您应该考虑将某些类型设为不可变是否有意义,并且在您当前公开数组的地方,改为公开只读集合。

于 2012-11-22T23:10:27.030 回答
1

如果您真的想使用您拥有的方法,我可能会建议使用动力学

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



      getDeviceParametersObj.arrayOfParameterName;  

      return getDeviceParametersObj;

    }
于 2012-11-22T23:11:42.737 回答
0

你有点反对类型系统。我认为您的 CustomDataType 类会导致比它解决的问题更多的问题。

您应该为将要使用的每个组合创建类,或者使用out参数以便能够从方法返回多个值。

没有办法告诉 Visual Studio 根据返回的方法忽略某些属性。

于 2012-11-22T23:10:37.857 回答