Maison >développement back-end >C++ >Comment puis-je transmettre des propriétés par référence en C# ?
Passer des propriétés par référence en C#
En C#, passer une propriété par référence signifie modifier la valeur de la propriété dans une méthode et refléter ces changements dans une autre méthode. Cependant, les propriétés ne sont pas transmises par référence par défaut. Il existe plusieurs façons d’obtenir ce comportement.
Valeur de retour
Une solution consiste à renvoyer la valeur de la méthode getter et à mettre à jour la propriété dans la méthode appelante.
<code class="language-csharp">public string GetString(string input, string output) { if (!string.IsNullOrEmpty(input)) { return input; } return output; } public void Main() { Person person = new Person(); person.Name = GetString("test", person.Name); Debug.Assert(person.Name == "test"); }</code>
Délégation
Une autre approche consiste à utiliser un délégué qui effectue une action qui définit la propriété.
<code class="language-csharp">public void GetString(string input, Action<string> setOutput) { if (!string.IsNullOrEmpty(input)) { setOutput(input); } } public void Main() { Person person = new Person(); GetString("test", value => person.Name = value); Debug.Assert(person.Name == "test"); }</code>
Expression LINQ
Les propriétés peuvent également être mises à jour par réflexion à l'aide d'expressions LINQ.
<code class="language-csharp">public void GetString<T>(string input, T target, Expression<Func<T, string>> outExpr) { if (!string.IsNullOrEmpty(input)) { MemberExpression expr = (MemberExpression)outExpr.Body; PropertyInfo prop = (PropertyInfo)expr.Member; prop.SetValue(target, input, null); } } public void Main() { Person person = new Person(); GetString("test", person, x => x.Name); Debug.Assert(person.Name == "test"); }</code>
Réflexion
Enfin, vous pouvez utiliser la réflexion pour définir directement la valeur d'une propriété.
<code class="language-csharp">public void GetString(string input, object target, string propertyName) { if (!string.IsNullOrEmpty(input)) { PropertyInfo prop = target.GetType().GetProperty(propertyName); prop.SetValue(target, input); } } public void Main() { Person person = new Person(); GetString("test", person, nameof(person.Name)); Debug.Assert(person.Name == "test"); }</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!