Maison >développement back-end >C++ >Comment puis-je transmettre des propriétés par référence en C# ?

Comment puis-je transmettre des propriétés par référence en C# ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-11 06:34:42931parcourir

How Can I Pass Properties by Reference in 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!

Déclaration:
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