【发布时间】:2010-05-27 06:10:45
【问题描述】:
嗨
我在 C# 中有方法,我必须从该方法返回多个值,而不使用像数组这样的集合。有什么靠谱的方法吗?
【问题讨论】:
-
你能扩展一下“多值”吗?它是您的返回值的常数吗?它们有逻辑联系吗?他们代表什么?它们属于同一类型吗?
标签: c#
嗨
我在 C# 中有方法,我必须从该方法返回多个值,而不使用像数组这样的集合。有什么靠谱的方法吗?
【问题讨论】:
标签: c#
是的,out 关键字:
public void ReturnManyInts(out int int1, out int int2, out int int3)
{
int1 = 10;
int2 = 20;
int3 = 30;
}
然后这样称呼它:
int i1, i2, i3;
ReturnManyInts(out i1, out i2, out i3);
Console.WriteLine(i1);
Console.WriteLine(i2);
Console.WriteLine(i3);
哪个输出:
10
20
30
编辑:
我看到很多帖子都建议为此创建自己的课程。这不是必需的,因为 .net 为您提供了一个类来做他们已经说过的事情。 Tuple 类。
public Tuple<int, string, char> ReturnMany()
{
return new Tuple<int, string, char>(1, "some string", 'B');
}
然后你可以像这样检索它:
var myTuple = ReturnMany();
myTuple.Item1 ...
myTuple.Item2 ...
存在泛型重载,因此您的元组中最多可以有 8 个唯一类型。
【讨论】:
Tuple.Create 方法可以推断类型:return Tuple.Create(1, "some string", 'B');
嗯,你可以使用:
out参数即:
class MyValues
{
public string Val1 { get; set; }
public int Val2 {get; set; }
}
public MyValues ReturnMyValues();
或
public void ReturnMyValues(out string Val1, out int Val2);
【讨论】:
如果您使用的是 .NET 4.0,则可以使用 generic Tuple 类之一从方法调用中返回多个值。静态 Tuple 类提供了创建 Tuple 对象的方法。因此,您不必为该方法定义自己的返回类型。
public Tuple<string,int> Execute()
{
return new Tuple<string,int>("Hello World", 2);
}
【讨论】:
是的,可以创建一个包含多个属性的新类型,然后返回这个类型:
public MyType MyMethod()
{
return new MyType
{
Prop1 = "foo",
Prop2 = "bar"
};
}
【讨论】:
描述符类或结构。你必须把它放在某个地方,因为一个方法必须只返回一个值是合乎逻辑的。或者,您可以使用 out 或 ref,但我会返回一个类。
顺便说一句,是什么让你不使用集合?
【讨论】:
public int Method Name(out string stringValue, out int intValue)
{
///
Method goes here
///
return intVaraible
}
在这里您将获得 3 个返回值 1.字符串值 2.intValue 3. intVariable
【讨论】: