方法应该返回多个值
HII
我在C#中有方法,我必须从该方法返回多个值而不使用像数组这样的集合。 有可靠的方法吗?
好吧,你可以使用:
- 自定义类/结构/类型,包含所有值
-
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);
是的, 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
编辑:
我看到很多post都建议为此创建自己的课程。 这不是必需的,因为.net为你提供了一个他们已经说过的课程。 Tuple
课。
public Tuple ReturnMany() { return new Tuple(1, "some string", 'B'); }
然后你可以像这样检索它:
var myTuple = ReturnMany(); myTuple.Item1 ... myTuple.Item2 ...
存在generics重载,因此您的元组中最多可以包含8种唯一类型。
如果您使用的是.NET 4.0,则可以使用其中一个通用Tuple类从方法调用中返回多个值。 静态Tuple类提供了创建Tuple对象的方法。 因此,您不必为方法定义自己的返回类型。
public Tuple Execute() { return new Tuple("Hello World", 2); }
是可以创建一个包含多个属性的新类型,然后返回此类型:
public MyType MyMethod() { return new MyType { Prop1 = "foo", Prop2 = "bar" }; }
为什么使用’out’是不可靠的方式? (或者你是否打错了而没有?)
有几种方法:
- 返回一个包含多个值的对象(struct / class等)
- 出
- REF
描述符类或结构。 你必须把它放在某个地方,因为一个方法必须只返回一个值是合乎逻辑的。 或者你可以使用out或ref,但我会返回一个类。
是什么让你不要使用collections品?
public int Method Name(out string stringValue, out int intValue) { /// Method goes here /// return intVaraible }
在这里你将得到3个返回值1. stringValue 2. intValue 3. intVariable