如何在c#方法中返回2个值

Not*_*ing 3 c#

我创建了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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想在w> p和p> 0时返回两个变量(w和p),但我不知道怎么能像那样返回.有人知道吗?

Joh*_*hnD 8

您将多个值返回给调用代码的选择是:

  1. 出了参数
  2. Ref params
  3. 返回包含多个值的结构/对象,或者像集合一样的其他类型

基本上,#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>或其他可以包含多个值的类型.

我不太清楚你的代码的意图是什么,所以你需要决定哪种方法最适合你.


Rom*_*man 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 };
   }
}
Run Code Online (Sandbox Code Playgroud)

如果知道在执行此方法之后哪个值是重要的,则可以使用更复杂的集合类,如Dictionary类,它允许您按名称引用其每个值.

我不会在这种情况下创建一个新的结构或类,因为我认为数组大小是一个非常简单的指示,表示在调用此方法之前和之后,类和结构将具有相同数量的变量时返回多少个值,很难说出返回了多少个值.

  • @socheata:你真的不需要给每个人的答案留下"+1谢谢你的回答".只需点击+1按钮; 他们可以说他们的答案已被提升.这里的标准是假设"谢谢,这个答案很有用".在整个地方添加这样的评论会让事情变得混乱. (2认同)

plm*_*lmw 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);
   }
}
Run Code Online (Sandbox Code Playgroud)