J'ai remarqué que j'utilise beaucoup ce modèle dans mon code C #. (C'est dans un script d'unité, si cela compte.)
if (someBoolean) { firstVar = 10; } else { secondVar = 10; }
3 Réponses :
S'il s'agit d'un événement fréquent, vous pouvez également utiliser des méthodes d'extension.
class Program
{
static void Main(string[] args)
{
var firstVar = 1;
var secondVar = 2;
true.SetValue(ref firstVar, ref secondVar);
false.SetValue(ref secondVar, ref secondVar);
Console.Read();
}
}
public static class BoolExtensions
{
public static void SetValue(this bool bVal, ref int first, ref int second)
{
if (bVal)
first = 10;
else
second = 10;
}
}
Je dois être honnête, je n'aime vraiment pas cette solution
@ MacCettura assez juste. Moi aussi, je voudrais simplement écrire simplement si-ele code> mais op ne semble pas les aimer. Et cela fonctionne. :)
J'ai peur que cela ne fonctionne pas dans mon cas. Comme mentionné, j'ai répété le motif, mais les opérations que j'ai effectuées sont souvent totalement différentes. Il y a le réglage, l'ajout, l'inversion, la concaténation, la sous-cordage, etc., etc. Cela fonctionnerait certainement si je répète le modèle et i> opération. Merci pour la suggestion!
@Nicolaskarayakaylar Vous pouvez écrire un ensemble de différentes méthodes d'extension pour chaque opération. Mais je pense que vous êtes vraiment inspiré d'un non-problème. Si / else code> Les déclarations sont parfaitement lisibles et pas trop de travail.
Oui je suis d'accord. Je vais rester avec si / sinon. Merci!
Utilisez simplement si / sinon. Vous - par lequel je veux dire, je suis / je le dépassais. P>
Vous pouvez utiliser Destructuration Affectation (C # 7) pour en faire une déclaration unique: s'il est plus expressif que le simple contrairement à Suggestion d'utiliser une fonction d'assistance avec si code> est en train de débattre, mais cela donne vous une déclaration unique au moins. Peut être une bonne option si le reste du projet utilise activement des caractéristiques "destruct" et de nouvelles fonctionnalités C # 7+. P> Réf code> Arguments Destruction peut être utilisé pour des tableaux, des listes et des propriétés: P> (list[0], list[1]) = someBoolean ? (list[0], 10) : (10, list[1]);
(x.SomeProp, x.OtherProp) = someBoolean ? (x.SomeProp, 10) : (10, x.OtherProp);
Si vous étiez en C ou C ++, vous pourriez empêcher ce code avec un ternaire renvoyant l'adresse de l'une des deux variables, que vous pourriez la déréférence et l'utilisation comme une lvalue. Quant à C #, écrivez simplement le si / sinon. Ce n'est pas "Icky", c'est lisible.
Vous pouvez même vous débarrasser des accolades dans votre dernier exemple.
(quelque part? (action) (n => firstvar = n): n => secondvar = n) (10); code> (Remarque: cette suggestion est uniquement à des fins de divertissement). Je vois ... Eh bien, si / sinon est la voie à suivre, je suppose que je devrais juste l'avaler. Ta.
Gah! Je me suis senti inspiré de la réponse de Sach et je suis allé faire une réponse à poster. J'aurais dû rétracté mon vote étroit. Oh bien, je vais partager ce que j'ai fait ici. DotNetFiddle.net/d2qjjp