2010-07-26 3 views
1

Pourquoi je ne peux pas l'avoir? Je veux dire qu'il épargnerait une déclaration de délégué:Pourquoi je ne peux pas utiliser la méthode anonyme comme ça?

int X=delegate int(){...}; 

Je sais que cela peut être fait de cette façon:

delegate int IntDelegate(); 
... 
IntDelegate del=delegate(){return 25;}; 
int X=del(); 
+0

Avez-vous regardé cette page: http://msdn.microsoft.com/en-us/library/0yw3tz5k(VS.80) .aspx –

Répondre

2

Tomas,

serait ce travail pour vous:

delegate int IntDelegate(); 
    // other stuff... 
    IntDelegate _del =() => 25; 

jim

[modifier] - oo ps, juste réalisé, la question était de faire un seul paquebot !! - Je vais penser

2

Parce que dans le premier exemple, vous essayez d'affecter un type de délégué dans un int, plutôt que la sortie d'un délégué dans un int. Un délégué est un type qui stocke une fonction, ce qui revient à renvoyer une valeur qui vous intéresse.

5

Un délégué n'est pas un int.

Si vous utilisez .Net 3.5 ou plus récente, vous pouvez utiliser le construit en Func au lieu d'utiliser une coutume (Func ont aussi des types génériques si vous avez besoin des arguments comme Func qui tages une chaîne et renvoient un int):

Func<int> X = delegate() { return 255; }; 

ou avec des expressions lambda:

Func<int> X =() => 255; 

Malheureusement, vous ne pouvez pas dire:

var X2 =() => 255; 

en C# mais vous pouvez faire quelque chose de similaire dans les langages fonctionnels ex F #. Au lieu de cela vous dire ceci en C#:

var X2 = new Func<int>(() => 255); 
2

Est-il vraiment nécessaire de créer un délégué, l'exécuter, et le retour de la valeur? Pourquoi ne pas simplement exécuter le code directement?

int x = new Func<int,int>(num => num*num) (3); 

retourneraient 9, mais voilà ce que:

int x = 3*3; 
Questions connexes