如何在C#中返回不同的数据类型?

时间:2015-02-21 13:22:44

标签: c# asp.net asp.net-mvc xamarin

我在C#中有一个方法,它必须根据输入参数返回2个不同的对象。

怎么办?

var nextPage = new LoadByContentType(1);
await App.Navigator.PushAsync(nextPage);

private ???? LoadByContentType(int Param1)
{
    if (Param1 == 1)
        return new ListPage(Param1);
    else
        return new WebviewPage(Param1);
}

3 个答案:

答案 0 :(得分:2)

使用两种类型的公共基类型(如@Sriram Sakthivel建议的那样)或使用基类用于所有其他类 object

  

支持.NET Framework类层次结构中的所有类,并为派生类提供低级服务。这是.NET Framework中所有类的最终基类;它是类型层次结构的根。

https://msdn.microsoft.com/en-us/library/system.object%28v=vs.110%29.aspx

@ITGuy提到ContentPageListPageWebviewPage共享的基类,因此您的代码的一个工作版本将是:

private ContentPage LoadByContentType(int Param1)
{
    if (Param1 == 1)
        return new ListPage(Param1);
    else
        return new WebviewPage(Param1);
}

答案 1 :(得分:2)

您可以创建一个公共类,让两个对象继承枚举,例如安全地获取所需的对象。

public enum PageTypeEnum{ ListPage,WebviewPage};
public abstract class BasePage 
{
  //Common data..
  public abstract PagetTypeEnum PageType{get;}
} 
public class ListPage : BasePage
{
   public overide PageTypeENum PageType {get{return PageTypeEnum.ListPage;}}
}
public class WebviewPage: BasePage
{
   public overide PageTypeENum PageType {get{return PageTypeEnum.WebviewPage;}}
}   

用法:

private static BasePage LoadByContentType(int Param1)
{
    if (Param1 == 1)
        return new ListPage(Param1);
    else
        return new WebviewPage(Param1);
}

答案 2 :(得分:1)

使用输出参数

private static BasePage LoadByContentType(int Param1, out int Param2, out int Param3)
{
   Param1 = 1;
   Param2 = 2;
   return something;
}

要打电话,你可以这样做:

int int1, int2;
var something = LoadByContentType(1, out int1, out int2);

有关C#out参数的更多信息位于:https://msdn.microsoft.com/en-us/library/t3c3bfhx.aspx