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"?
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
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)));
Mais vu ce que je dois réellement en faire dans mon code, je voudrais savoir le faire avec LINQ.
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); } }
Merci pour votre aide,
Partager