Modification de la propriété C# : contournement du passage direct par référence
C# ne prend pas directement en charge la transmission de propriétés par référence. Cette limitation peut compliquer les tentatives de modification des propriétés en externe, conduisant à des résultats inattendus.
Comprendre le problème de la compilation
Le code suivant illustre le problème :
<code class="language-csharp">public void GetString(string inValue, ref string outValue) { // code } public void SetWorkPhone(string inputString) { GetString(inputString, ref this.WorkPhone); // Compile-time error }</code>
Cela échoue car les propriétés ne sont pas des types de référence ; ce sont des méthodes gérant les champs privés sous-jacents.
Approches alternatives pour modifier les propriétés
Bien que le passage direct de références soit impossible, plusieurs techniques permettent d'obtenir des résultats similaires :
<code class="language-csharp">public string GetString(string inputString) { return string.IsNullOrEmpty(inputString) ? this.WorkPhone : inputString; }</code>
<code class="language-csharp">public void GetString(string inputString, Action<string> updateWorkPhone) { if (!string.IsNullOrEmpty(inputString)) { updateWorkPhone(inputString); } }</code>
<code class="language-csharp">public void GetString<T>(string inputString, T target, Expression<Func<T, string>> outExpr) { if (!string.IsNullOrEmpty(inputString)) { var prop = (outExpr.Body as MemberExpression).Member as PropertyInfo; prop.SetValue(target, inputString); } }</code>
<code class="language-csharp">public void GetString(string inputString, object target, string propertyName) { if (!string.IsNullOrEmpty(inputString)) { var prop = target.GetType().GetProperty(propertyName); prop.SetValue(target, inputString); } }</code>
Ces méthodes contournent efficacement la limitation du passage direct par référence, fournissant des moyens contrôlés et sûrs de modifier indirectement les propriétés C#.
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!