如何在c#中返回2个值
本文关键字:返回 2个值 | 更新日期: 2023-09-27 18:18:15
我创建了c#函数来比较项目中的价格。
public static decimal? SpecialPrice(decimal w, decimal p)
{
if (w < p)
{
return p;
}
else if (w > p && p > 0)
{
//return (w , p);
}
else
{
return w;
}
}
当w> p和p> 0时,我想返回两个变量(w和p),但我不知道如何返回。有人知道吗?
您可以选择向调用代码返回多个值:
- 出params
- Ref params
- 返回一个包含多个值的结构体/对象,或其他类型,如集合
基本上,#1和#2让你有方法参数,让你把值传递回调用代码。请看这里的例子&参考:
http://msdn.microsoft.com/en-us/library/ee332485.aspx (out params)
http://msdn.microsoft.com/en-us/library/14akc2c7.aspx (ref params)
对于#3,将使用不同于decimal?
的返回值。例如,您可以声明一个具有两个属性的类,并返回该类的一个实例。或者返回一个List<decimal>
或者其他可以保存多个值的类型
我不太清楚你的代码的目的是什么,所以你需要决定哪种方法最适合你。
您可以使用Tuple
:
public static Tuple<decimal?, decimal?> SpecialPrice(decimal w, decimal p)
{
if (w < p)
{
return new Tuple<decimal?, decimal?>(p, null);
}
else if(w > p && p>0)
{
return new Tuple<decimal?, decimal?>(p, w);
}
else
{
return new Tuple<decimal?, decimal?>(w, null);
}
}
在c#中你不能从方法中返回两个值。最好是返回一个数组或一些集合类型,允许保存多个值。
也许像这样:
public static decimal[] SpecialPrice(decimal w, decimal p)
{
if (w < p)
{
return new decimal[] { p };
}
else if(w > p && p > 0)
{
return new decimal[] { w, p };
}
else
{
return new decimal[] { w };
}
}
如果在这个方法执行之后知道哪个值是哪个值很重要,可以使用更复杂的集合类,如Dictionary类,它允许您通过名称引用它的每个值。
在这种情况下,我不会创建一个新的结构体或类,因为我认为数组大小是一个非常容易的指示,返回多少值,类和结构体在调用此方法之前和之后将具有相同数量的变量,使其更难判断返回多少值。
不能让它返回多个对象。但是,您可以使返回的对象更复杂。
public struct PandW
{
public decimal? p{get;set;}
public decimal? w{get;set;}
}
然后改变你的方法返回PandW
对象:
public static PandW SpecialPrice(decimal w, decimal p)
{
PandW temp;
if (w < p)
{
temp.w=null;
temp.p=p;
return temp;
}else if(w > p && p>0){
temp.w=w;
temp.p=p;
return temp;
}else{
temp.w=w;
temp.p=null;
return temp;
}
}
有几种方法可以返回多个值:
- 你可以创建一个类或结构与多个字段,并从你的方法返回一个实例
- 你可以给你的方法添加输出参数
- 可以返回数组
- 可以返回
KeyValuePair
(不推荐)
在本例中,我更倾向于使用第一种方法返回两个值:
class PriceRet {
decimal? w;
decimal? p;
}
PriceRet SpecialPrice(decimal w, decimal p) {
var res = new PriceRet();
if (w < p) {
res.p = p;
} else if(w > p && p>0) {
res.w = w;
res.p = p;
} else {
res.w = w;
}
return res;
}
尝试KeyValuePair<decimal,decimal>(w,p)
,但您需要将返回类型更改为KeyValuePair
。
希望对你有帮助。
这就是为什么要发明结构
public struct PricePoints
{
decimal? w, p;
public PricePoints SpecialPrice()
{
PricePoints res;
if (w < p)
{
res.p = p;
res.w = null;
}
else if (w > p && p > 0)
{
res = this;
}
else
{
res.w = w;
res.p = null;
}
return res;
}
}
最好的方法是返回具有两个属性的对象,也可以使用out变量
public static testhelper SpecialPrice(decimal w,decimal p)
{
//set your values in the object
var Obj=new testhelper{
w=some value,
p= some value
};
//// your code
if (w < p)
{
return p;
}else if(w > p && p>0){
//return (w , p);
}else{
return w;
}返回Obj;}
public class testhelper{
public int p{get;set;}
public int w{get;set;}
}