Passer une propriété en tant que paramètre ‘out’ dans C #

Supposons que j’ai:

public class Bob { public int Value { get; set; } } 

Je veux passer le membre Value en tant que paramètre out comme

 Int32.TryParse("123", out bob.Value); 

mais j’obtiens une erreur de compilation “, l’argument ‘out’ n’est pas classé comme une variable.” Y a-t-il un moyen d’y parvenir, ou dois-je extraire une variable, à la:

 int value; Int32.TryParse("123", out value); bob.Value = value; 

Vous devez utiliser explicitement un champ et une propriété “normale” au lieu d’une propriété implémentée automatiquement:

 public class Bob { private int value; public int Value { get { return value; } set { this.value = value; } } } 

Vous pouvez ensuite passer le champ en paramètre out:

 Int32.TryParse("123", out bob.value); 

Mais bien sûr, cela ne fonctionnera que dans la même classe, car le champ est privé (et devrait l’être!).

Les propriétés ne vous permettent tout simplement pas de faire cela. Même dans VB où vous pouvez passer une propriété par référence ou l’utiliser comme paramètre out, il existe essentiellement une variable temporaire supplémentaire.

Si vous ne vous souciez pas de la valeur de retour de TryParse , vous pouvez toujours écrire votre propre méthode d’assistance:

 static int ParseOrDefault(ssortingng text) { int tmp; int.TryParse(text, out tmp); return tmp; } 

Ensuite, utilisez:

 bob.Value = Int32Helper.ParseOrDefault("123"); 

De cette façon, vous pouvez utiliser une seule variable temporaire même si vous devez le faire à plusieurs endroits.

Vous pouvez y arriver, mais pas avec une propriété.

 public class Bob { public int Value { get; set; } // This is a property public int AnotherValue; // This is a field } 

Vous ne pouvez pas utiliser sur Value , mais vous pouvez sur AnotherValue .

Cela fonctionnera

 Int32.TryParse("123", out bob.AnotherValue); 

Mais les directives communes vous indiquent de ne pas rendre public un champ de classe. Donc, vous devriez utiliser l’approche variable temporaire.