2017-06-15 2 views
0

Est-il possible en C# de définir une variable comme ça?Définition d'une variable dans un commutateur() de fermeture

switch(var num = getSomeNum()) { 
    case 1: //Do something with num 
      break; 

    default: break; 
} 

public static int GetSomeNum() => 3; 
+0

Eh bien, que vous dit le compilateur? –

+1

D'une certaine manière, votre question est similaire à celle-ci https://stackoverflow.com/questions/8155772/setting-a-variable-to-a-switchs-result –

+0

Copie possible de [Définition d'une variable aux résultats d'un commutateur] (https://stackoverflow.com/questions/8155772/setting-a-variable-to-a-switchs-result) –

Répondre

2

Le documentation dit que

En C# 6, l'expression de match doit être une expression qui renvoie une valeur des types suivants:

  • char.

  • une chaîne.

  • une bool.

  • une valeur intégrale, telle qu'un int ou un long.

  • une valeur enum.

A partir de C# 7, l'expression de correspondance peut être une expression non nulle.

Pour répondre à votre question,

Oui, vous pouvez activer un entier, par exemple

int myInt = 3; 
switch(myInt) 

Oui, vous pouvez activer le résultat d'une méthode qui retourne un bulletin, par exemple

int GetMyInt() 
{ 
    // Get my Int 
} 

switch(GetMyInt()) 

Oui vous pouvez activer la variable peuplée avec un résultat de la méthode, par exemple

int GetMyInt() 
{ 
    // Get my Int 
} 

int myInt = GetMyInt(); 

switch(myInt) 

Non vous ne pouvez pas le faire comme ça.

+0

Merci! Je demandais parce que j'ai vu la keynote de Microsoft sur C# 7, mais ne me souviens pas correctement tous les nouveaux trucs qu'ils ont introduits et ne pouvait trouver nulle part une réponse. –