首頁 > 後端開發 > C++ > 如何在 C# 中透過引用傳遞屬性?

如何在 C# 中透過引用傳遞屬性?

Susan Sarandon
發布: 2025-01-11 06:34:42
原創
937 人瀏覽過

How Can I Pass Properties by Reference in C#?

在C#中透過引用傳遞屬性

在C#中,透過引用傳遞屬性是指在一個方法中修改屬性的值,並在另一個方法中反映這些變更。但是,預設情況下,屬性不會透過引用傳遞。有多種方法可以實現此行為。

回傳值

一種方法是從getter方法傳回該值,並在呼叫方法中更新屬性。

<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>
登入後複製

委託

另一種方法是使用一個委託,該委託採用一個設定屬性的操作。

<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>
登入後複製

LINQ表達式

也可以使用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>
登入後複製

反射

最後,可以使用反射直接設定屬性的值。

<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>
登入後複製

以上是如何在 C# 中透過引用傳遞屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板