具有多个返回参数的c#方法
本文关键字:方法 参数 返回 | 更新日期: 2023-09-27 17:48:59
c#/.net中是否需要多个返回参数?
public string, string GetFirstNameAndLastName(int id)
{
var person = from p in People
where p.Id = id
select p;
return(p.FirstName, p.LastName);
}
用法:
public void Main(string[] args)
{
string firstName, lastName;
(firstName, lastName) = GetFirstNameAndLastName(1);
Console.WriteLine(firstName + ", " + lastName);
}
您可以在c# 4.0中使用Tuple以轻量级的方式实现这一点
public Tuple<string, string> GetFirstNameAndLastName(int id)
{
var person = from p in People
where p.Id = id
select p;
return new Tuple<string, string>(p.FirstName, p.LastName);
// OR
// return Tuple.Create(p.FirstName, p.LastName);
}
System.Tuple
还具有与f#原生元组类型互操作的好处(好吧,它是f#的原生元组类型,恰好有f#特定的语法支持来声明元组和返回元组的函数)。
考虑到这里存在多种方法:System.Tuple
,多个out
参数或返回具有FirstName
和LastName
属性的POCO,我怀疑Anders Hejlsberg可能不会添加对多个返回值的显式支持。
不,只使用out
参数。
public void GetFirstNameAndLastName(int id, out string first, out string last)
{
var person = from p in People
where p.Id = id
select p;
first = p.FirstName;
last = p.LastName;
}
根据@James Webster的建议,您可以使用元组,也可以使用dynamic
和ExpandoObject
class Program
{
static void Main(string[] args)
{
var d = GetUserDynamic();
Console.WriteLine("{0}.{1}", d.FirstName, d.LastName);
}
private static dynamic GetUserDynamic()
{
dynamic d = new ExpandoObject();
d.FirstName = "amandeep";
d.LastName = "tur";
return d;
}
}
No。如果元素是相关的,应该返回一个更有用的数据类型,比如类。
public MyPersonClassGetFirstNameAndLastName(int id)
{
var person = from p in People
where p.Id = id
select p;
MyPersonClassreturnValue = new MyPersonClass;
returnValue.FirstName = p.FirstName;
returnValue.LastName= p.LastName;
return returnValue;
}
除了在其他答案中指出的可能性之外,还有更多的方法来存档:
- 创建自己的返回类型(类似于Tuple方法)并返回它的一个实例
- ref parameters: http://msdn.microsoft.com/en-us/library/14akc2c7%28v=vs.80%29.aspx
视情况而定。在您的例子中,您可以返回整个人员记录,
public string, string GetFirstNameAndLastName(int id)
{
var person = from p in People
where p.Id = id
select p;
return person;
}
或者如果情况需要,您可以创建自己的数据类型
你可以这样做:
public void GetFirstNameAndLastName(int id, out string firstName, out string lastName)
{
var person = from p in People
where p.Id = id
select p;
firstName = p.FirstName;
lastName = p.LastName;
}
,然后像这样调用:
public void Main(string[] args)
{
string firstName, lastName;
GetFirstNameAndLastName(1, out firstName, out lastName);
Console.WriteLine(firstName + ", " + lastName);
}