Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何让策略模式中的一个策略返回多个值_C#_Design Patterns_Strategy Pattern - Fatal编程技术网

C# 如何让策略模式中的一个策略返回多个值

C# 如何让策略模式中的一个策略返回多个值,c#,design-patterns,strategy-pattern,C#,Design Patterns,Strategy Pattern,我实施了一个战略模式。其中一个策略应该返回2个值,而其余的则返回1个值。我目前在接口方法中使用out param,目的是使其可用于设置此值的一个策略,并使其在所有其他策略中为空,如下例所示 我想知道是否有更好的方法让一个策略返回多个值,而不让所有其他策略处理这个out参数(即使它们都将其设置为null) 例如: 我建议您考虑两个强有力的备选签名: (一) IEnumerable计算(十进制配置DAMT); (二) 十进制计算(十进制配置DAMT,额外操作); 您可以这样实现这些: var s

我实施了一个战略模式。其中一个策略应该返回2个值,而其余的则返回1个值。我目前在接口方法中使用out param,目的是使其可用于设置此值的一个策略,并使其在所有其他策略中为空,如下例所示

我想知道是否有更好的方法让一个策略返回多个值,而不让所有其他策略处理这个out参数(即使它们都将其设置为null) 例如:


我建议您考虑两个强有力的备选签名:

(一)

IEnumerable计算(十进制配置DAMT);
(二)

十进制计算(十进制配置DAMT,额外操作);
您可以这样实现这些:

var s = new Strategy1();
var extras = new List<decimal>();
decimal r = s.Calculate(1m, x => extras.Add(x));
(一)

公共IEnumerable计算(十进制金额)
{
收益率1m;
收益率42m;
收益率2m;
}
(二)

公共十进制计算(十进制金额,额外操作)
{
额外(1米);
额外(42m);
返回2m;
}
第二个选项可以这样使用:

var s = new Strategy1();
var extras = new List<decimal>();
decimal r = s.Calculate(1m, x => extras.Add(x));
var s=newstrategy1();
var extras=新列表();
十进制r=s.Calculate(1m,x=>extras.Add(x));

结果是
r==2m
&
extras
包含
1m
&
42m

我建议您考虑两个强有力的备选签名:

(一)

IEnumerable计算(十进制配置DAMT);
(二)

十进制计算(十进制配置DAMT,额外操作);
您可以这样实现这些:

var s = new Strategy1();
var extras = new List<decimal>();
decimal r = s.Calculate(1m, x => extras.Add(x));
(一)

公共IEnumerable计算(十进制金额)
{
收益率1m;
收益率42m;
收益率2m;
}
(二)

公共十进制计算(十进制金额,额外操作)
{
额外(1米);
额外(42m);
返回2m;
}
第二个选项可以这样使用:

var s = new Strategy1();
var extras = new List<decimal>();
decimal r = s.Calculate(1m, x => extras.Add(x));
var s=newstrategy1();
var extras=新列表();
十进制r=s.Calculate(1m,x=>extras.Add(x));

结果是
r==2m
&
extras
包含
1m
&
42m

public class CalculateResult {
    decimal amount {get;set}
    decimal? recurrent {get;set}
}

我建议创建一个同时包含这两个元素的类

public class CalculateResult {
    decimal amount {get;set}
    decimal? recurrent {get;set}
}

我建议您不要返回原始数据类型,而是返回一个用户定义的数据类型(如类、结构),其中包含作为属性的所有必需信息

class result
{
   decimal result1;
   decimal? result2;
   .......
}

我建议您不要返回原始数据类型,而是返回一个用户定义的数据类型(如类、结构),其中包含作为属性的所有必需信息

class result
{
   decimal result1;
   decimal? result2;
   .......
}

IEnumerable
作为返回类型?或者一个类中有两个属性(对于两个值)?如果您有许多策略返回一个值,而一个策略应该返回多个值,那么后者听起来并不属于同一个位置。它们是如何使用的?
IEnumerable
可能作为返回类型?或者一个类中有两个属性(用于两个值)?如果您有许多策略返回一个值,而一个策略应该返回多个值,那么后者听起来并不属于同一个位置。它们是如何使用的?