ホームページ > バックエンド開発 > C++ > 直接参照渡しがサポートされていない場合、C# プロパティを効果的に変更するにはどうすればよいですか?

直接参照渡しがサポートされていない場合、C# プロパティを効果的に変更するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-11 06:23:48
オリジナル
866 人が閲覧しました

How Can I Effectively Modify C# Properties When Direct Pass-by-Reference Isn't Supported?

C# プロパティの変更: 直接参照渡しのバイパス

C# は、参照によるプロパティの受け渡しを直接サポートしていません。 この制限により、プロパティを外部から変更する試みが複雑になり、予期しない結果が生じる可能性があります。

コンパイル時の問題を理解する

次のコードは問題を示しています:

<code class="language-csharp">public void GetString(string inValue, ref string outValue)
{
    // code
}

public void SetWorkPhone(string inputString)
{
    GetString(inputString, ref this.WorkPhone); // Compile-time error
}</code>
ログイン後にコピー

プロパティが参照型ではないため、これは失敗します。これらは、基礎となるプライベート フィールドを管理するメソッドです。

プロパティを変更するための代替アプローチ

直接参照を渡すことは不可能ですが、いくつかの手法で同様の結果が得られます。

  • 戻り値の変更: 最も簡単な方法は、変更された値を返すことです:
<code class="language-csharp">public string GetString(string inputString)
{
    return string.IsNullOrEmpty(inputString) ? this.WorkPhone : inputString;
}</code>
ログイン後にコピー
  • デリゲートベースの更新: デリゲートを使用してプロパティを更新:
<code class="language-csharp">public void GetString(string inputString, Action<string> updateWorkPhone)
{
    if (!string.IsNullOrEmpty(inputString))
    {
        updateWorkPhone(inputString);
    }
}</code>
ログイン後にコピー
  • LINQ 式のアプローチ: より高度な方法では、LINQ 式を使用します:
<code class="language-csharp">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);
    }
}</code>
ログイン後にコピー
  • リフレクションベースの変更: リフレクションは、動的なプロパティへのアクセスと変更を提供します:
<code class="language-csharp">public void GetString(string inputString, object target, string propertyName)
{
    if (!string.IsNullOrEmpty(inputString))
    {
        var prop = target.GetType().GetProperty(propertyName);
        prop.SetValue(target, inputString);
    }
}</code>
ログイン後にコピー

これらのメソッドは、直接参照渡しの制限を効果的に回避し、C# プロパティを間接的に変更するための制御された安全な方法を提供します。

以上が直接参照渡しがサポートされていない場合、C# プロパティを効果的に変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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