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运行。
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册