Maison > développement back-end > C++ > Comment puis-je modifier efficacement les propriétés C# lorsque le passage direct par référence n'est pas pris en charge ?

Comment puis-je modifier efficacement les propriétés C# lorsque le passage direct par référence n'est pas pris en charge ?

Susan Sarandon
Libérer: 2025-01-11 06:23:48
original
866 Les gens l'ont consulté

How Can I Effectively Modify C# Properties When Direct Pass-by-Reference Isn't Supported?

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>
Copier après la connexion

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 :

  • Modification de la valeur de retour : L'approche la plus simple consiste à renvoyer la valeur modifiée :
<code class="language-csharp">public string GetString(string inputString)
{
    return string.IsNullOrEmpty(inputString) ? this.WorkPhone : inputString;
}</code>
Copier après la connexion
  • Mise à jour basée sur un délégué : Utilisez un délégué pour mettre à jour la propriété :
<code class="language-csharp">public void GetString(string inputString, Action<string> updateWorkPhone)
{
    if (!string.IsNullOrEmpty(inputString))
    {
        updateWorkPhone(inputString);
    }
}</code>
Copier après la connexion
  • Approche des expressions LINQ : Une méthode plus avancée utilise des expressions LINQ :
<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>
Copier après la connexion
  • Modification basée sur la réflexion : Reflection offre un accès et une modification dynamiques aux propriétés :
<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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal