C#/.NET应用程序编程开发中一个方法如何返回多个返回值?

C#开发 作者: Rector 16 次阅读 · 读完约需 1 分钟 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

C#/.NET应用程序编程开发中一个方法如何返回多个返回值?

问题描述

在C#/.NET应用程序编程开发中,对于初学者来说,对于方法的使用可能存在一些局限性。常规情况下,他们认为一个方法可以没有返回值,即:void,也可以有一个返回值,类似:

public int Add(int x,int y)
{
    return x + y;
}

那么,如果想要一个方法返回多个返回值,在C#中如何实现呢?

方案一

如果是.NET 4.0及以上版本,则可用Tuple,它位于命名空间System中,使用方法如下:

public Tuple<int, int> GetMultipleValue()
{
     return Tuple.Create(1,2);
}

完整示例:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main()
  {
    var result = GetMultipleValue();
    var value1 = result.Item1;
    var value2 = result.Item2;
    Console.WriteLine($"value1:{value1}");
    Console.WriteLine($"value2:{value2}");
  }

  private static Tuple<int, int> GetMultipleValue()
  {
      return Tuple.Create(1,2);
  }
}

输出结果:

value1:1
value2:2

如果是.NET 7.0+,则可以简化为如下写法:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main()
  {
    var result = GetMultipleValue();
    var value1 = result.Item1;
    var value2 = result.Item2;
    Console.WriteLine($"value1:{value1}");
    Console.WriteLine($"value2:{value2}");
  }

  private static (int,int) GetMultipleValue()
  {
    return (2,3);
  }
}

输出结果:

value1:2
value2:3

或者还可以为Tuple指定别名,如下:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main()
  {
    var result = GetMultipleValue();
    var x = result.x;
    var y = result.y;
    Console.WriteLine($"x:{x}");
    Console.WriteLine($"y:{y}");
  }

  private static (int x,int y) GetMultipleValue()
  {
    return (x:2,y:3);
  }
}

输出结果:

x:2
y:3

方案二

使用ref或者out参数

ref完整示例:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main()
  {
    var msg = "";
    var result = GetMultipleValue(ref msg);
    Console.WriteLine($"result:{result}");
    Console.WriteLine($"msg:{msg}");
  }

  private static int GetMultipleValue(ref string message)
  {
    message = "这是返回的消息字符串(ref)";
    return 2;
  }
}

输出结果:

result:2
msg:这是返回的消息字符串(ref)

out完整示例:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main()
  {
    string msg;
    var result = GetMultipleValue(out msg);
    Console.WriteLine($"result:{result}");
    Console.WriteLine($"msg:{msg}");
  }

  private static int GetMultipleValue(out string message)
  {
    message = "这是返回的消息字符串(out)";
    return 3;
  }
}

输出结果:

result:3
msg:这是返回的消息字符串(out)

方案三

为返回值定义一个特定的类/结构,如:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main()
  {
    var result = GetMultipleValue();
    var x = result.x;
    var y = result.y;
    Console.WriteLine($"x:{x}");
    Console.WriteLine($"y:{y}");
  }

  private static ResultModel GetMultipleValue()
  {
    var result =new ResultModel{
      x = 2,
      y = 3
    };
    return result;
  }
}

public class ResultModel
{
  public int x {get;set;}
  public int y {get;set;}
}

输出结果:

x:2
y:3

方案四

使用ExpandoObject创建dynamic对象,其中ExpandoObject位于命名空间System.Dynamic中,如:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
  public static void Main()
  {
    var result = GetMultipleValue();
    var x = result.x;
    var y = result.y;
    Console.WriteLine($"x:{x}");
    Console.WriteLine($"y:{y}");
  }

  private static dynamic GetMultipleValue()
  {
    dynamic result = new System.Dynamic.ExpandoObject();
    result.x = 3;
    result.y = 5;
    return result;
  }
}

输出结果:

x:3
y:5

温馨提示:本文标注有(完整示例)的示例代码可以直接在try.dot.net运行。

阅读了该文章的人还浏览了...

本文永久链接码友网 » C#/.NET应用程序编程开发中一个方法如何返回多个返回值?

发布于: 2019-06-18 15:16:53
分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册