我创建了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&gt;时返回两个变量(w和p) p和p> 0,但我不知道怎么能这样回来。有人知道吗?
答案 0 :(得分:8)
您将多个值返回给调用代码的选择是:
基本上,#1和#2允许您使用方法参数将值传递回调用代码。在此处查看示例&amp;参考:
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>
或其他可以包含多个值的类型。
我不清楚代码的意图是什么,因此您需要确定哪种方法最适合您。
答案 1 :(得分:6)
在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类,它允许您按名称引用其每个值。
我不会在这种情况下创建一个新的结构或类,因为我认为在调用此方法之前,数组大小很容易指示返回多少个值,其中类和结构将具有相同数量的变量。之后,更难以判断返回了多少值。
答案 2 :(得分:6)
您可以使用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);
}
}
答案 3 :(得分:1)
你不能让它返回多个对象。但是,您可以使返回的对象更复杂。
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;
}
}
答案 4 :(得分:1)
有多种方法可以返回多个值:
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;
}
答案 5 :(得分:1)
最好的方法是返回具有两个属性的对象,并且还可以使用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;}
}
答案 6 :(得分:1)
尝试KeyValuePair<decimal,decimal>(w,p)
,但您需要将返回类型更改为KeyValuePair
。
希望有所帮助。
答案 7 :(得分:1)
这就是为什么发明的结构
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;
}
}