在c#中,是否有可能将两个不同的类作为返回类型从一个层传递到另一个层?

本文关键字:返回类型 另一个 一个 是否 有可能 两个 | 更新日期: 2023-09-27 18:04:01

我的应用程序是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的返回类型,我也不想结合这两个类。如果有什么办法可以帮到我,请告诉我。

在c#中,是否有可能将两个不同的类作为返回类型从一个层传递到另一个层?

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

函数可以有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

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

public class YouClassName
{
     public MasterItemsCls MasterItemsCls {get; set;}
     public ReturnValueCls ReturnValueCls {get; set;}
}

一个方法只能返回一个对象。您可以创建其他类,其中每个类都有实例

泛型可以作为返回元素的包装器。

你可以这样做:

public ReturnValueCls<MasterItemsCls> GetMasterItemsMDL()
{
}

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


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

public class ReturnValueCls<T>
{
    public T Value { et; set;}
    public string Message {get; set;}
}   
相关文章: