1

我的应用程序具有 n 层架构。我有不同的层(业务逻辑和数据链接和 GUI)。我正在使用一些通用类将数据从一层传递到另一层。我有一个RetrnValueCls只有两个变量Return valueReturn Message. 当我将数据从一层传递到另一层时,我需要返回这个Return Value类以及MasterItemsCls具有其他变量的另一个类(比如)。

下面是方法

public MasterItemsCls GetMasterItemsMDL()
{
    /* Does some computations and assign them to
    attributes of MasterItemsCls and pass it other methods in other layers. */
}

public ReturnValueCls GetMasterItemsMDL()
{
    /* Does some computations and assign them to
    attributes of ReturnValueCls and pass it other methods in other layers. */
}

我想同时返回上述两个类(MasterItemsCls& ReturnValueCls)作为该方法GetMasterItemsMDL的返回类型,而且我不想将这两个类结合起来。请让我知道是否有任何方法可以做到这一点。

4

4 回答 4

7

一个函数只能返回一个值,所以从这个意义上说,答案是否定的。

函数可以有out参数,因此您可以通过参数返回两个值之一out

在我看来,最干净的处理方法是使用第三类来包含其他两个。 Tuple<T1,T2>可用于此目的:

public Tuple<MasterItemsCls, ReturnValueCls> MyFunction()
{
    // Do stuff
    return new 
    Tuple<MasterItemsCls, ReturnValueCls>(myMasterItemsCls, myReturnValueCls);
}

的一个缺点Tuple<T1,T2>是这些值被访问为相当不直观的Item1Item2

如果您不想使用Tuple<T1,T2>,很容易创建自己的类来包含MasterItemsClsReturnValueCls。这是我的首选方法。

于 2013-03-15T16:44:12.577 回答
6

您不需要组合这两个类,但一种可能且直接的方法是生成一个类,该类包含您尝试返回的每个类的一个实例。

public class YouClassName
{
     public MasterItemsCls MasterItemsCls {get; set;}
     public ReturnValueCls ReturnValueCls {get; set;}
}
于 2013-03-15T16:43:24.820 回答
0

泛型作为返回元素的包装器可能会有所帮助。

您可以执行以下操作:

public ReturnValueCls<MasterItemsCls> GetMasterItemsMDL()
{

}

ReturnValueCls<T>期望其返回类型有一个类型参数。因此,您的 retun 类型可以充当您所需返回的包装器,并能够保存您的返回消息。


您的类定义示例。可能需要一些约束:

public class ReturnValueCls<T>
{
    public T Value { et; set;}
    public string Message {get; set;}
}   
于 2013-03-15T16:49:30.597 回答
0

一个方法只能返回一个对象。您可能会创建一些其他类,其中包含每个其他类的实例。

于 2013-03-15T16:44:01.183 回答