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