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
958 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 :

public void GetString(string inValue, ref string outValue)
{
    // code
}

public void SetWorkPhone(string inputString)
{
    GetString(inputString, ref this.WorkPhone); // Compile-time error
}
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 :
public string GetString(string inputString)
{
    return string.IsNullOrEmpty(inputString) ? this.WorkPhone : inputString;
}
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é :
public void GetString(string inputString, Action<string> updateWorkPhone)
{
    if (!string.IsNullOrEmpty(inputString))
    {
        updateWorkPhone(inputString);
    }
}
Copier après la connexion
  • Approche des expressions LINQ : Une méthode plus avancée utilise des expressions LINQ :
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);
    }
}
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 :
public void GetString(string inputString, object target, string propertyName)
{
    if (!string.IsNullOrEmpty(inputString))
    {
        var prop = target.GetType().GetProperty(propertyName);
        prop.SetValue(target, inputString);
    }
}
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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal