ホームページ > バックエンド開発 > C++ > C# でプロパティを参照によって渡すにはどうすればよいですか?

C# でプロパティを参照によって渡すにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-11 06:34:42
オリジナル
936 人が閲覧しました

How Can I Pass Properties by Reference in C#?

C# での参照によるプロパティの受け渡し

C# では、プロパティを参照によって渡すことは、あるメソッドでプロパティの値を変更し、その変更を別のメソッドに反映することを意味します。ただし、デフォルトではプロパティは参照によって渡されません。この動作を実現するには複数の方法があります。

戻り値

1 つの方法は、ゲッター メソッドから値を返し、呼び出し側のメソッドでプロパティを更新することです。

<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>
ログイン後にコピー

代表団

もう 1 つのアプローチは、プロパティを設定するアクションを実行するデリゲートを使用することです。

<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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート