假设在C#类中有类似_Abc(int a, int b)
的方法,通常需要2个参数。
是否可以从_Abc(int a, int b)
方法获取4个int值作为返回值?
答案 0 :(得分:10)
您可以返回Tuple<int, int, int, int>
。返回元组作为公共API的一部分并不是非常有用,所以在这种情况下我会创建一个类来保存返回值,以便命名这些值。
答案 1 :(得分:9)
虽然到目前为止的答案(返回元组,返回集合,返回自定义类/结构,或使用参数)都是合理的答案,更好的答案是:首先不要这样做即可。返回四件事的方法可能是设计糟糕的方法。
你能重新设计一下这个类型,比如你有四种不同的方法(或属性),每种方法都返回一个东西吗?您可能有更好的模式供您使用。你能更详细地解释你的情景吗?
答案 2 :(得分:6)
您可以返回自定义类型,这是最灵活和可扩展的方法。
public static Foo GetFoo(int a, int b)
{
Foo foo = new Foo();
foo.A = 1;
foo.B = 2;
foo.C = 3;
foo.D = 4;
return foo;
}
这是伪类
public class Foo
{
public int A{ get; set; }
public int B{ get; set; }
public int C{ get; set; }
public int D{ get; set; }
}
另一种方式(使用.NET 4)使用Tuple
public static Tuple<int,int,int,int> GetFoo(int a, int b)
{
return Tuple.Create(1,2,3,4);
}
由于您以这种方式阅读属性,因此不像类方法那么可读:
var values = GetFoo(1, 2);
int A = values.Item1;
int B = values.Item2;
int C = values.Item3;
int D = values.Item4;
所以一个元组有点匿名。
如果您只想返回一个或两个其他参数,也可以使用TryParse
方法中的out
参数。
DateTime dt;
String str = "01.01.2013";
if(DateTime.TryParse(str, out dt))
{
// so this method returns two variables:
// a bool as return value and a DateTime as out parameter
Console.WriteLine("Year: " + dt.Year);
}
答案 3 :(得分:2)
除了Lee的回答,您可以添加一些ref
或out
参数,即:
_Abc(int a, int b, out int c, out int d, out int e, out int f)
答案 4 :(得分:1)
您还可以使用out参数创建这样的函数。
public void _Abc(int a, int b, out res1, out res2, out res3, out res4)
{
res1 = 1;
res2 = 2;
res3 = 3;
res4 = 4;
}
答案 5 :(得分:1)
如果您可以更改方法,则可以使用参数。 http://msdn.microsoft.com/en-us/library/t3c3bfhx(v=vs.80).aspx
_Abc(int a, int b, out int c, out int d, out int e, out int f){
c=1;
d=2;
e=3;
f=4;
}
答案 6 :(得分:0)
您可以将其作为out parameters
返回答案 7 :(得分:0)
如果您要返回4个完全不同的东西,那么最好创建一个新类型。例如,如果要返回新创建的形状的高度,宽度,顶部和底部值,则应创建一个包含所有这些值的类,并使用正确的变量名称。
如果您持有4种相同类型的东西,那么将它们全部放入某种类型的集合中可能是有意义的。例如,如果四个数字代表四种不同形状的区域,则返回List<int>
或int[]
是有意义的。
答案 8 :(得分:0)
我认为你需要简单,对吧?
尝试理解这个简单的代码(只需复制和粘贴):
class Class1
{
private List<int> _Abc(int a, int b)
{
// do job
int x = 128, y = 256, z = 512;
List<int> returns = new List<int>();
returns.Add(x);
returns.Add(y);
returns.Add(z);
return returns;
}
public void anotherMethod()
{
List<int> simple = new List<int>();
simple = _Abc(55, 56);
int[] _simple = simple.ToArray();
for (int i = 0; i < simple.Count; i++)
{
Console.WriteLine("" + _simple[i]);
}
//Console.ReadKey();
}
}