具有多个返回参数的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#方法

您可以在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参数或返回具有FirstNameLastName属性的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的建议,您可以使用元组,也可以使用dynamicExpandoObject

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;
}

除了在其他答案中指出的可能性之外,还有更多的方法来存档:

  1. 创建自己的返回类型(类似于Tuple方法)并返回它的一个实例
  2. 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);
}