-5
votes

Une ligne si-d'autre en c #

en C #, y a-t-il une implémentation d'une ligne de la pièce simple simple de logique?

if (a != null) 
{
    b = a ;
}
else
{
    // do something else;
}

c#

14 commentaires

Vous pouvez faire: si (a! = Null) b = a; tout en une seule ligne


opérateur ternaire


b = a! = null? un B


Si vous avez besoin du bloc el / code>, qui n'attribuait pas à B , alors non.


Les lignes-- signifie parfois la lisibilité -, qu'est-ce qui ne va pas avec plusieurs lignes?


A = a? null: b = a;


@L_OSTE_FA_NO Cela dépend beaucoup de ce que vous faites ou ne voulez pas que vous ne voulez pas sinon, si vous ne voulez rien faire de la réponse de Jayv. Si vous voulez autre chose, vous pouvez le faire dans une ligne .. Mais comme d'autres l'ont dit ne gagne rien d'une ligne


@BugFinder OK, je comprends. Disons dans le sinon J'ai simplement besoin de définir un drapeau sur FALSE. Peut-être qu'il n'y a pas tant à gagné, mais je pensais qu'il y avait un moyen plus efficace de le faire. Cela me pertinente parce que ce type de chèques apparaît très souvent dans mon code.


@L_OSTE_FA_NO Définir "Efficace"


Exactement qu'est-ce que vous essayez d'atteindre? Qu'entendez-vous par «un moyen plus efficace de le faire»? Après avoir examiné les réponses données - il existe des moyens de faire tout cela sur une ligne - mais ils sont plus complexes à comprendre et à produire probablement plus de code. Parfois simple est bon. En ce qui concerne tout ce que tout sur une ligne est concerné - il fait de déboguer un cauchemar - en C # Visual Studio, il est possible de définir des points d'arrêt dans une seule ligne - mais c'est une douleur réelle (d'autres langues comme C ++ n'ont pas cette installation au moins à vs2015).


Dans ce cas par efficacement, je veux dire que l'on pourrait obtenir la même logique sans répéter a . Mais je suppose que vous avez raison de dire que pour faire cela, la complexité du code augmente considérablement et à la fin, il est probablement préférable de le garder simple.


@L_OSTE_FA_NO Exactement, si vous avez dû lire le code de quelqu'un d'autre, préférez-vous le code de votre question ou dans la réponse acceptée?


@ VC74 Je suppose que vous connaissez la réponse ;-) Il semble que je tiens au code de la façon dont c'était.


Je suis surpris personne n'utilisé b = a ?? b; . Si A n'est pas null, il l'associe à B et s'il est null, il s'assure B to B ne modifie donc pas la valeur de b. Ai-je oublié quelque chose?


5 Réponses :


0
votes
string asd = "asd";
string bsd = null;

asd = bsd != null ? bsd : new Func<string>(() => { Console.WriteLine("Do something"); return asd; })();
This won't change asd and it is "one-liner" but i would not recommend this over normal if else

0 commentaires

1
votes

Je ne saurais pas vraiment pourquoi, mais oui, vous pouvez:

if (a != null) { b = a; } else { Console.WriteLine("Welcome to the 'else' branch"); }


6 commentaires

@Giladgreen pourquoi pas?


@Rafalon parce que sous cette logique, tout le programme C # peut être une doublure :)


Je suis tenté de modifier cette réponse et de le formater correctement;)


@Giladgreen Oui, ça fait. Si vous voulez autre chose que de ne pas avoir de nouveaux caractères de ligne, vous devriez demander à que , de ne pas avoir le code sans aucun nouveau caractère de ligne.


@ vc74 moi aussi :-)


Si cela vous dérange, vous pouvez même éliminer les crochets si (a! = Null) b = a; sinon console.writeline ("blabla");



4
votes

Peut-être que vous recherchiez une notation sans brise?

if (a != null) b = a; else /*Do something else*/ ;


3 commentaires

Bien ok :-), mais peut-on éviter de répéter le a ?


Vous pouvez facilement créer une méthode comme bool setifnotnoull (objet A, objet B) puis appelez-le si (! Setifnotnull (A, B)) / * Faites quelque chose d'autre * /


@L_OSTE_FA_NO, qui semble être un casse-tête intéressant, mais je ne pense pas qu'il y ait une bonne raison pratique à le faire. Je voudrais définitivement voir une solution élégante .



0
votes

Je ne sais pas pourquoi on voudrait faire cela, mais voici ma prise: xxx


1 commentaires

@Peterb: oui ça fait. Essayez-le. :-)



2
votes

Si vous voulez faire un si / else dans une seule ligne, vous devez connaître la structure que le code doit avoir:

condition? conséquence: alternative

Par exemple: xxx


0 commentaires