Maison > développement back-end > C++ > Comment puis-je modifier efficacement les propriétés C# par référence lorsque la transmission directe n'est pas possible ?

Comment puis-je modifier efficacement les propriétés C# par référence lorsque la transmission directe n'est pas possible ?

Mary-Kate Olsen
Libérer: 2025-01-11 09:50:42
original
976 Les gens l'ont consulté

How Can I Effectively Modify C# Properties by Reference When Direct Passing Isn't Possible?

Modification des propriétés C# par référence : solutions de contournement

Le passage direct des propriétés C# par référence n'est pas réalisable en raison de la sémantique de référence du langage. Cependant, plusieurs méthodes offrent des fonctionnalités similaires.

1. Modification de la valeur de retour :

La méthode la plus simple consiste à renvoyer la valeur de la propriété modifiée à partir de la fonction de modification. Le code appelant met ensuite à jour la propriété avec cette valeur renvoyée.

<code class="language-csharp">string GetString(string input, string output)
{
    return string.IsNullOrEmpty(input) ? output : input;
}

// Example usage:
var person = new Person();
person.Name = GetString("test", person.Name);</code>
Copier après la connexion

2. Approche basée sur les délégués :

Les délégués permettent de transmettre des références de fonction en tant qu'arguments. Cela permet de modifier la valeur de la propriété dans le cadre du délégué.

<code class="language-csharp">void SetStringValue(string input, Action<string> setter)
{
    if (!string.IsNullOrEmpty(input))
    {
        setter(input);
    }
}

// Example usage:
var person = new Person();
SetStringValue("test", value => person.Name = value);</code>
Copier après la connexion

3. Tirer parti des expressions LINQ :

Les expressions LINQ offrent un accès à la réflexion, permettant la définition dynamique de la valeur des propriétés.

<code class="language-csharp">void SetProperty<T>(string input, T target, Expression<Func<T, string>> propertyExpression)
{
    if (!string.IsNullOrEmpty(input))
    {
        var memberExpression = (MemberExpression)propertyExpression.Body;
        var propertyInfo = (PropertyInfo)memberExpression.Member;
        propertyInfo.SetValue(target, input);
    }
}

// Example usage:
var person = new Person();
SetProperty("test", person, x => x.Name);</code>
Copier après la connexion

4. Utiliser la réflexion :

Reflection permet une inspection d'exécution et une modification de la structure des objets. Cela permet la récupération dynamique et la définition des valeurs de propriété.

<code class="language-csharp">void SetPropertyValue(string input, object target, string propertyName)
{
    if (!string.IsNullOrEmpty(input))
    {
        var property = target.GetType().GetProperty(propertyName);
        property?.SetValue(target, input);
    }
}

// Example usage:
var person = new Person();
SetPropertyValue("test", person, nameof(Person.Name));</code>
Copier après la connexion

Ces méthodes fournissent des alternatives au passage direct des références de propriété, permettant une manipulation flexible de la valeur de propriété en 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