2013-03-15 30 views
1

我的应用程序有n层体系结构。我有不同的层次(业务逻辑&数据链接& GUI)。我正在使用一些常用的类将数据从一个层传递到另一个层。我有一个班(说RetrnValueCls),它只有两个变量Return valueReturn Message。当我将数据从一层传递到另一层时,我需要返回这个Return Value类以及其他类(比如说MasterItemsCls),该类有其他变量。在c#中,是否有可能将两个不同的类作为返回类型从一个图层传递到其他图层?

下面是方法

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一次,也是我不想两个类结合起来。请让我知道我是否有办法做到这一点。

回答

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。这是我首选的方法。

+1

+1注意代码是如何有时不可读得到的,如果你在C#中使用'Tuple's。例如'tuple.Item1 + tuple.Item2 - 元组。Item3'将可读性带走 – 2013-03-15 16:47:55

+0

@IlyaIvanov:元组可以很方便,但通常我会花时间创建一个自定义类。 – 2013-03-15 16:48:54

+0

同意,主观,但我认为元组是将用F#编写的部分与C#代码集成的好方法。 F#有一个很好的处理元组的机制,比如模式匹配。我试图在一个项目中加入元组,但不超过两个通用参数,而且很少。 – 2013-03-15 16:50:49

6

你并不需要两个类,但一个可能的和直接的方法相结合是产生一个包含你试图返回每个类的一个实例的类。

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

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

0

仿制药可能是因为你的归来元素的包装有帮助的。

你可以做到以下几点:

public ReturnValueCls<MasterItemsCls> GetMasterItemsMDL() 
{ 

} 

ReturnValueCls<T>预计,它的返回类型的类型参数。所以你的retun类型可以作为你想要的回报的包装,并能够保存你的回报信息。


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

public class ReturnValueCls<T> 
{ 
    public T Value { et; set;} 
    public string Message {get; set;} 
} 
相关问题