2011-01-18 4 views
0

Je suis en train de parcourir ce tutoriel WPF http://blogs.vertigo.com/personal/alanl/Blog/Lists/Posts/Post.aspx?ID=18 et j'ai une question à propos de la section CountToFontSizeConverter du tutoriel. Quelqu'un pourrait-il expliquer s'il vous plaît la déclaration de retour me i.e.Aide de syntaxe instruction conditionnelle

return ((minFontSize + count + increment) < maxFontSize) ? 
     (minFontSize + count + increment) : maxFontSize; 

Je comprends que c'est une condition mais la syntaxe semble plutôt sur mesure. Si possible, quelqu'un peut-il réécrire cela d'une manière plus simple? Merci

Répondre

4

Je ne sais pas ce que vous entendez par « un peu sur mesure », mais il vaut la peine de tomber en panne.

Original:

return ((minFontSize + count + increment) < maxFontSize) 
     ? (minFontSize + count + increment) : maxFontSize; 

dégradables:

bool condition = (minFontSize + count + increment) < maxFontSize; 
if (condition) 
{ 
    return minFontSize + count + increment; 
} 
else 
{ 
    return maxFontSize; 
} 

Une meilleure approche - beaucoup plus lisible:

return Math.Min(minFontSize + count + increment, maxFontSize); 

En général, vous pouvez généralement remplacer une expression de la forme

a < b ? a : b 

avec

Math.Min(a, b) 

en supposant que a et b sont des types numériques. Ce n'est pas toujours le cas, mais c'est un bon point de départ.

+0

Bespoke, selon Wikipedia est soi-disant un mot anglais britannique pour « sur mesure jusqu'à la le tissu et les coupes exactes "bien que étant donné que vous vivez là ... – Crisfole

+0

@Cpfohl: Oui, je suis heureux avec" sur-mesure "comme un mot en général - mais je ne vois pas où il s'intègre ici :) –

+0

Peut-être "sur mesure" était le mauvais mot.Peut-être que j'aurais dû dire "inhabituel" car j'apprends encore C# et cette syntaxe ne m'est pas familière :) – Ben

0

Ce:

return ((minFontSize + count + increment) < maxFontSize) ? (minFontSize + count + increment) : maxFontSize; 

traduit efficacement à:

if ((minFontSize + count + increment) < maxFontSize) 
    return (minFontSize + count + increment); 
else 
    return maxFontSize; 

Dans ce cas, puisque le but est d'empêcher l'expression d'être plus grand que "maxFontSize", je personnellement juste utilisation:

return Math.Min(minFontSize + count + increment, maxFontSize); 

Je trouve que cela exprime l'intention beaucoup plus clairement.

0

Voici un exemple de l'ternary conditional operator (ou simplement l'opérateur conditionnel), et peut être réécrite comme:

if ((minFontSize + count + increment) < maxFontSize) 
{ 
    return minFontSize + count + increment; 
} 

return maxFontSize; 
0
var cache = (minFontSize + count + increment); 

return (cache < maxFontSize) ? cache : maxFontSize; 
0

Ce n'est rien d'autre qu'un opérateur conditionnel de C#. La syntaxe est comme suit Condition? Statement1 (if true): Statement2 (if false) Si votre condition renvoie la valeur true, Statement1 est exécuté et si le résultat est faux, Statement2 est exécuté.

Dans votre cas, si (minFontSize + count + incrément)> maxFontSize, maxFontSize est évalué autre (minFontSize + count + incrément)

Questions connexes