C# 如何从一个方法返回多个值?
我想从C#中的方法返回年龄值,如下所示C# 如何从一个方法返回多个值?,c#,C#,我想从C#中的方法返回年龄值,如下所示 private int UpdateAges( int age1, int age2, int age3, int age4) { age1++; age2++; age3++; age4++; return (age1, age2, age3, age4); } MessageBox.Show(UpdateAges(45, 30, 45, 30).ToString()); 我可以像下面这样使用它 priv
private int UpdateAges( int age1, int age2, int age3, int age4)
{
age1++;
age2++;
age3++;
age4++;
return (age1, age2, age3, age4);
}
MessageBox.Show(UpdateAges(45, 30, 45, 30).ToString());
我可以像下面这样使用它
private int UpdateAges( int age1, int age2, int age3, int age4)
{
age1++;
age2++;
age3++;
age4++;
return (age1, age2, age3, age4);
}
MessageBox.Show(UpdateAges(45, 30, 45, 30).ToString());
试试这个:
private Tuple<int, int, int, int> UpdateAges( int age1, int age2, int age3, int age4)
{
age1++;
age2++;
age3++;
age4++;
return Tuple.Create(age1, age2, age3, age4);
}
私有元组更新(int-age1、int-age2、int-age3、int-age4)
{
年龄1++;
年龄2++;
年龄3++;
年龄4++;
返回Tuple.Create(年龄1、年龄2、年龄3、年龄4);
}
另请参见:about如果只想在消息框中显示结果,则返回字符串:
private string UpdateAges(int age1, int age2, int age3, int age4)
{
age1++;
age2++;
age3++;
age4++;
return "age1 = " + age1 + ", age2 = " + age2 + ", age3 = " + age3 + ", age4 = " + age4;
}
MessageBox.Show(UpdateAges(45, 30, 45, 30));
如果还希望在显示的消息框后更新年龄值,请为每个参数添加ref关键字
private string UpdateAges(ref int age1, ref int age2, ref int age3, ref int age4)
{
age1++;
age2++;
age3++;
age4++;
return "age1 = " + age1 + ", age2 = " + age2 + ", age3 = " + age3 + ", age4 = " + age4;
}
MessageBox.Show(UpdateAges(ref age1, ref age2, ref age3, ref age4));
您也可以像这样使用'out int'
private void UpdateAges(int IAge1, int IAge2, int IAge3, int IAge4, out int OAge1, out int OAge2, out int OAge3, out int OAge4)
{
OAge1 = IAge1++;
OAge2 = IAge2++;
OAge3 = IAge3++;
OAge4 = IAge4++;
}
UpdateAges( Age1, Age2, Age3, Age4, out Age1, out Age2, out Age3, out Age4 );
当你调用这个时,你需要像这样使用
private void UpdateAges(int IAge1, int IAge2, int IAge3, int IAge4, out int OAge1, out int OAge2, out int OAge3, out int OAge4)
{
OAge1 = IAge1++;
OAge2 = IAge2++;
OAge3 = IAge3++;
OAge4 = IAge4++;
}
UpdateAges( Age1, Age2, Age3, Age4, out Age1, out Age2, out Age3, out Age4 );
请参阅—
从函数返回多个值的方法很少
元组类型
和元组文字
,您可以从一个方法返回多个值
(int, int, int, int) UpdateAges(int age1, int age2, int age3, int age4) // tuple return type
{
age1++;
age2++;
age3++;
age4++;
return (age1, age2, age3, age4);
}
使用:
使用元组:
private Tuple<int, int, int, int> UpdateAges(int age1, int age2, int age3, int age4)
{
age1++;
age2++;
age3++;
age4++;
return Tuple.Create(age1, age2, age3, age4);
}
私有元组更新(int-age1、int-age2、int-age3、int-age4)
{
年龄1++;
年龄2++;
年龄3++;
年龄4++;
返回Tuple.Create(年龄1、年龄2、年龄3、年龄4);
}
您可以通过多种方式解决此问题
private Tuple<int, int, int, int> UpdateAges(int age1, int age2, int age3, int age4)
{
return Tuple.Create(++age1, ++age2, ++age3, ++age4);
}
private List<int> UpdateAges(ref int age1, ref int age2, ref int age3, ref int age4)
{
age1++;
age2++;
age3++;
age4++;
}
私有列表更新(ref-int-age1、ref-int-age2、ref-int-age3、ref-int-age4)
{
年龄1++;
年龄2++;
年龄3++;
年龄4++;
}
如何使用列表执行此操作:
private static List<int> UpdateAges(int age1, int age2, int age3, int age4)
{
return new List<int> { ++age1, ++age2, ++age3, ++age4 };
}
好的,希望有帮助。1。使用out:
private Tuple<int, int, int, int> UpdateAges(int age1, int age2, int age3, int age4)
{
age1++;
age2++;
age3++;
age4++;
return Tuple.Create(age1, age2, age3, age4);
}
2。Usng KeyValuePair:
private Tuple<int, int, int, int> UpdateAges(int age1, int age2, int age3, int age4)
{
age1++;
age2++;
age3++;
age4++;
return Tuple.Create(age1, age2, age3, age4);
}
静态KeyValuePair更新(年龄1、年龄2)
{
返回新的KeyValuePair(age1++,age2++);
}
国际年龄1;
国际年龄2;
var对=GetTwoNumbers(年龄1,年龄2);
控制台写入线(配对键);
控制台写入线(对值);
3。使用元组:
static Tuple<int, int> UpdateAges(age1, age2)
{
return new Tuple<int, int>(age1++, age2++);
}
int age1;
int age2;
var tuple = UpdateAges(age1,age2);
int a = tuple.age1;
int b = tuple.age2;
静态元组更新(年龄1、年龄2)
{
返回新元组(age1++,age2++);
}
国际年龄1;
国际年龄2;
var tuple=UpdateAges(年龄1,年龄2);
int a=tuple.age1;
int b=tuple.age2;
虽然您可以使用Tuple
或ref
来实现所需,但我不确定这是否是您的最佳实践
您可以使用专用类封装所有逻辑:
public class Ages
{
public int Age1 { get; set; }
public int Age2 { get; set; }
public int Age3 { get; set; }
public int Age4 { get; set; }
private void UpdateAges()
{
this.Age1++;
this.Age2++;
this.Age3++;
this.Age4++;
}
private string ToString() =>
$"Age1 = {this.age1}, Age2 {this.age2}, Age3 = {this.age3}, Age4 {age4}";
}
这样,与处理年龄相关的所有内容都放在一个地方,并且可以跨代码重用
当然,您可以更进一步,用列表或数组替换“age”属性
public class Ages
{
public int[] Ages { get; }
public Ages (params int[] ages)
{
this.Ages = ages;
}
private void UpdateAges() =>
for (int i = 0; i < this.Ages.Length; i++) this.Ages[i]++;
private string ToString() =>
string.Join(", ",
this.Ages.Select((age, i) => $"Age{i} = {age}"));
}
var ages = new Ages(31, 40, 12, 18);
ages.UpdateAges();
MessageBox.Show(ages.ToString());
公共课年龄
{
公共int[]年龄{get;}
公共年龄(参数int[]年龄)
{
这个。年龄=年龄;
}
私有void UpdateAges()=>
对于(inti=0;i
string.Join(“,”,
Select((age,i)=>$“age{i}={age}”);
}
变量年龄=新年龄(31,40,12,18);
ages.UpdateAges();
Show(ages.ToString());
带有方法参数的
,
您可以传递在可枚举、列表数组等中返回的任意数量的参数。
灵活调用Increment(1,2,3),
Increment(1,2),
Increment(myIntArray),
Increment(1)`
对于显示器,您可以使用<代码>字符串.连接(“,”结果)
iEnumerable,tuple,你自己的类。。。有很多选择。将“private int”替换为“private(int,int,int,int)”如果你没有团队负责人或其他人指导你,我建议你阅读编程书籍,阅读开源(c#/java)代码,并学习如何编写代码。对于您的情况,您如何处理结果?您是否使用这些值?或者将它们转发给另一个函数?真正的答案需要更多的信息,技术上的答案应该是元组,或者创建“holder类”,然后返回一个包含这4个int值的类。命名元组更甜。KeyValuePair不应像元组那样使用。age1怎么可能是age2的键?@Emaro它是用来定义age1-like键和age2-like值的。我知道它是如何工作的。然而,它在语义上被滥用,我认为这是不好的做法。值元组
(inta1,inta2)
将是一个更好的选择。此解决方案不必要且复杂<代码>无效更新(out int i)=>i++就足够了(例如,您只需要out变量,不需要将参数数量增加一倍)代码>@Emaro,是的,我知道。op code更新(45,30,45,30)
立即敲响此铃。只是忘了把它包括在答案里。谢谢你。更新答案以使其清晰
static IEnumerable<int> Increment(params int[] args)
{
return args.Select(x => x + 1);
}
var result = Increment(45, 30, 45, 30);
// {46, 31, 46, 31}
static void Main(string[] args)
{
var uniqueValue = 99;
var multipleValues = new[] { 1, 2, 6 };
var uvResult = Increment(uniqueValue);
var mvResult = Increment(multipleValues);
Console.WriteLine($"uniqueValue = {uniqueValue} => {string.Join(", ",uvResult)}");
Console.WriteLine($"multipleValues = {string.Join(", ",multipleValues)} => {string.Join(", ",multipleValues)}");
}