Pengubahsuaian Harta C#: Memintas Terus Laluan-Rujukan
C# tidak secara langsung menyokong sifat lulus melalui rujukan. Had ini boleh merumitkan percubaan untuk mengubah suai sifat secara luaran, yang membawa kepada hasil yang tidak dijangka.
Memahami Isu Masa Kompilasi
Kod berikut menggambarkan masalah:
<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>
Ini gagal kerana sifat bukan jenis rujukan; ia adalah kaedah menguruskan medan persendirian asas.
Pendekatan Alternatif untuk Mengubah Suai Sifat
Walaupun hantaran rujukan langsung adalah mustahil, beberapa teknik mencapai hasil yang serupa:
<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>
Kaedah ini secara berkesan memintas had rujukan terus, menyediakan cara terkawal dan selamat untuk mengubah suai sifat C# secara tidak langsung.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubahsuai Sifat C# Dengan Berkesan Apabila Rujukan Laluan Terus Tidak Disokong?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!