C# 4.0 多个返回值的Tuple或out参数?

C# 4.0 多个返回值的Tuple或out参数?,c#-4.0,C# 4.0,我想从c#中的方法返回多个参数。我只是想知道哪一个更好 static void Split (string name, out string firstNames, out string lastName) { int i = name.LastIndexOf (' '); firstNames = name.Substring (0, i); lastName = name.Substring (i + 1); } static Tuple<string,

我想从c#中的方法返回多个参数。我只是想知道哪一个更好

static void Split (string name, out string firstNames, out string lastName)
{
    int i = name.LastIndexOf (' ');
    firstNames = name.Substring (0, i);
    lastName   = name.Substring (i + 1);
}


static Tuple<string,string> Split (string name)
{
//TODO
}
static void Split(字符串名、输出字符串名、输出字符串名)
{
int i=name.LastIndexOf(“”);
firstNames=name.Substring(0,i);
lastName=name.Substring(i+1);
}
静态元组拆分(字符串名称)
{
//待办事项
}
如果需要从一个方法返回多个值,通常会有一个(值)类隐藏在某处。使用
Split()
方法作为ctor的值类如何:

public class Name
{
    public Name(string name)
    {
        int i = name.LastIndexOf (' ');
        FirstNames = name.Substring (0, i);
        LastName   = name.Substring (i + 1);
    }

    public string FirstName {get; private set;}
    public string LastName {get; private set;}
}
而不是

Split(name, out string firstName, out string lastName);
照办

Name n = new Name(name);

然后通过
n.FirstName
n.LastName

访问名字和姓氏。还有第三个选项:创建一个新类型并返回该类型的实例。@Brian:谢谢,先生。我有一个问题,什么时候使用Tupel?没有一个比另一个更好,只是偏好的问题元组被添加到基本库中以支持函数式编程风格。在函数式语言中,数据通常以元组和列表的形式传递。元组和列表有一个缺点。它们的成员没有命名,如果不小心使用,则不利于可读性。通常,如果数据在代码中停留一段时间,最好将其保存在专门的值对象中。这样,数据就有了隐含的含义。如果你将数据保存在元组中,你需要知道第一个值是名字,第二个值是姓氏(或者是另一种方式?)。让它成为“显式意义”…@Eric:+1作为创新的答案。C现在有隐式私有设置器吗?你说“值类”,但你定义了一个引用类型(尽管只使用getter)。你为什么不把它变成一个struct?使用“value class”我不是指一个struct(与引用类型相反),而是指一个value对象()。@Stephen:不,不是。我实际上没有把这段代码输入编译器。我把它直接输入SO comment文本框。正在修复。。。