从类的属性返回2个值

时间:2012-12-27 10:01:58

标签: c#

  

可能重复:
  How can I return multiple values from a function in C#?

想象一下,我们有一个获取类似10-1685的值的属性,我想在类中添加另一个属性,将这两个值作为单独的值返回。我能如何实现?

    public string UserName { get; set; }



    public string UserNameSeparated
    {
        get { Username.Split('-');
        }
        set
        {
            ...What do do here??
        }
    }

3 个答案:

答案 0 :(得分:3)

将属性的返回类型更改为字符串数组:

public string UserName { get; set; }

public string[] UserNameSeparated
{
    get { Username.Split('-'); }
    set
    {
        UserName = String.Join("-", value);
    }
}

用法:

foo.UserName = "10-1685";
string[] names = foo.UserNameSeparated;
// names[0] = "10";
// names[1] = "1685";
foo.UserNameSeparated = new string[] { "15", "42" };
// foo.UserName = "15-42"

但要考虑为名称的两个部分都提供属性。您可以随时计算全名,并且您将处理不错的命名属性而不是元组或数组索引(支持地狱):

public string FirstName { get; set; }
public string LastName { get; set; }

public string UserName
{
    get { return String.Format("{0}-{1}", FirstName, LastName); }
    set 
    {
        // check if value format valid
        var names = value.Split('-');
        FirstName = names[0];
        LastName = names[1];
    }
}

只需比较(您可以提供更多描述性名称,更好地描述您的数据):

foo.FirstName
foo.LastName

使用:

foo.UserNameSeparated.Item1
foo.UserNameSeparated.Item2 

答案 1 :(得分:3)

你可以使用元组。

此问题已在此处得到解答:How can I return multiple values from a function in C#?

答案 2 :(得分:0)

在Jamie引用的帖子中,引用了一个基于以下内容的帖子:Returning multiple values from a C++ function

那里的'流行'答案是使用了一个。但是,您应该注意Bill K,Fred Larson和Jonathan Leffler的答案,这些答案都指出更好的方法是使用类或结构。

另请参阅Microsoft如何在.net框架中构建自己的代码。我从来没有见过他们使用touple作为任何东西的返回值。我认为这是一个相当好的迹象,表明哪种做法更好。