可能重复:
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??
}
}
答案 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作为任何东西的返回值。我认为这是一个相当好的迹象,表明哪种做法更好。