Méthode à l'aide de la touche Func<T,TResult> en tant que paramètres
J'ai besoin d'aide sur la simplification de ma méthode
J'ai cette méthode
public double ComputeBasicAmount(double basicLimit, double eligibleAmt)
{
return basicLimit * eligibleAmt;
}
exemple d'utilisation:
Foo foo = new Foo(100, 1000);
double basicAmt = ComputeBasicAmount(foo.BasicLimit, foo.EligibleAmt)
Le problème ici c'est que je veux le eligibleAmt dynamique parce que parfois
ce n'est pas vraiment que les eligbleAmt ce que je suis de passage à la méthode.. comme ce
Foo foo = new Foo(100, 1000);
double basicAmt = ComputeBasicAmount(foo.BasicLimit, foo.EligibleAmt/foo.RoomRate)
Ma solution c'est d'utiliser le Func délégué en tant que paramètre mais je ne sais pas comment l'utiliser correctement
je veux quelque chose de fonctionnel comme ce
public double ComputeBasicAmount<T>(double basicLimit, Func<T, double> multiplier)
{
return basicLimt * multiplier;
}
double basicAmt = ComputeBasicAmount<Foo>(foo.BasicLimit, x => x.EligibleAmt/x.RoomRate)
quelqu'un peut m'aider. merci à l'avance...
OriginalL'auteur CSharpNoob | 2010-09-10
Vous devez vous connecter pour publier un commentaire.
Si le multiplicateur dépend de l'élément, puis soit vous aurez besoin de passer l'élément ainsi, ou vous aurez besoin de retourner un
Func<T, double>
:ou
Si aucune de celles-ci est ce que vous cherchez, veuillez expliquer d'où vous voulez que le réelle valeur de
T
être prévue de sorte que vous pouvez travailler sur le multiplicateur.La première est très similaire juste d'avoir une
Func<double>
pour calculer le multiplicateur, bien sûr... qui à son tour est un peu comme appel queFunc<double>
lors du calcul de l'argumentation, pour en revenir à votre version originale, qui prend juste deux doubles.OriginalL'auteur Jon Skeet
Vous pouvez déclarer simplement comme un
Func<double>
(de cette façon vous ne faites pas de la méthode dépend de laFoo
type), et de passer toute méthode prenant aucun paramètre et retournant un double argument:Quelques exemples d'appels:
Vous pouvez également avoir une autre méthode retournant une
double
...et le passer en argument:
oh man, je suppose que je n'ai pas à utiliser des Génériques ici parce que je n'ai pas à passer le Type... merci man...
exactement. La méthode est déjà aussi générique que cela, étant donné que nous avons toujours voulu le faire fonctionner sur
double
valeurs.OriginalL'auteur Fredrik Mörk
Vous devez utiliser un
Func<double>
depuis que vous utilisez seulement le double résultatPuis l'appeler comme cela
Mais alors vous pourriez avoir un double régulière paramètre à la place.
OriginalL'auteur Albin Sunnanbo
Vous vous souhaitez déclarer votre méthode de quelque chose comme cela, alors que le multiplicateur est un délégué qui prend un objet Foo et renvoie un double:
Ensuite l'appeler comme ça, en passant lambda dans le multiplicateur:
Foo
instance n'est en cours passé donc il n'y a rien pour leComputeBasicAmount
d'appeler leFunc
avec.Absolument droit, fixe.
merci mais ma méthode est la même que la vôtre est la différence, le mien est Générique
OriginalL'auteur Chris Fulstow
Merci les gars, grâce À votre aide, j'ai pu rendre mon code plus lisible et fonctionnelle...
Mais j'ai un autre problème.. je Veux éliminer le passage de la BasicLimit parce que je pense qu'il est redondant ici. Est-il possible de mettre la BasicLimit à l'intérieur de la ComputeBasicAmount méthode
Quelque chose comme ça..
Mais je dois mettre cette question dans un autre fil, car je pense que c'est un autre sujet...
Voir vous les gars là... merci...
OriginalL'auteur CSharpNoob