Bonjour,
J'ai le code suivant qui plante au niveau de mon appel à Aggregate avec l'erreur "Error 1 Cannot convert lambda expression to delegate type 'System.Func<RiskFactor,RiskFactor,RiskFactor>' because some of the return types in the block are not implicitly convertible to the delegate return type
Error 2 Cannot implicitly convert type 'double' to 'RiskFactor'".
En effet il cherche à retourner un objet riskFactor alors que je cherche à avoir juste un double. Comment lui faire retourner juste le résultat de la multiplication de tous mes éléments "factor" dont le label vaut "toto"?
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class RiskFactor {
	public string label;
	public double? factor;
}
List<RiskFactor> riskFactors = new List<RiskFactor>();
RiskFactor riskFactor;
for (int i = 1; i < 5; i++) {
	riskFactor = new RiskFactor();
	riskFactor.label == "toto";
	riskFactor.factor = i * 2;
	riskFactors.Add(riskFactor);
 
	riskFactor = new RiskFactor();
	riskFactor.label == "titi";
	riskFactor.factor = i * 3;
	riskFactors.Add(riskFactor);
}
double res = riskFactors.Where(x => x.label == "toto").Aggregate((x, y) => ((x.factor.HasValue ? x.factor.Value : 1) * (y.factor.HasValue ? y.factor.Value : 1)));
Je sais que je peux faire comme ceci :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
double res = 1;
foreach (var item in riskFactors) {
	if (item.label == "toto") {
		res *= (item.factor.HasValue ? item.factor.Value : 1);
	}
}
Mais vu ce que je dois réellement en faire dans mon code, je voudrais savoir le faire avec LINQ.
Merci pour votre aide,