Melalukan sifat C# secara langsung melalui rujukan tidak boleh dilaksanakan kerana semantik rujukan bahasa. Walau bagaimanapun, beberapa kaedah menawarkan kefungsian yang serupa.
1. Pengubahsuaian Nilai Pulangan:
Kaedah paling mudah melibatkan pengembalian nilai sifat yang diubah suai daripada fungsi pengubahsuaian. Kod panggilan kemudian mengemas kini harta dengan nilai yang dikembalikan ini.
<code class="language-csharp">string GetString(string input, string output) { return string.IsNullOrEmpty(input) ? output : input; } // Example usage: var person = new Person(); person.Name = GetString("test", person.Name);</code>
2. Pendekatan Berasaskan Perwakilan:
Perwakilan membolehkan rujukan fungsi lulus sebagai argumen. Ini membenarkan pengubahsuaian nilai harta dalam skop perwakilan.
<code class="language-csharp">void SetStringValue(string input, Action<string> setter) { if (!string.IsNullOrEmpty(input)) { setter(input); } } // Example usage: var person = new Person(); SetStringValue("test", value => person.Name = value);</code>
3. Memanfaatkan Ungkapan LINQ:
Ekspresi LINQ menawarkan akses kepada refleksi, membolehkan tetapan nilai sifat dinamik.
<code class="language-csharp">void SetProperty<T>(string input, T target, Expression<Func<T, string>> propertyExpression) { if (!string.IsNullOrEmpty(input)) { var memberExpression = (MemberExpression)propertyExpression.Body; var propertyInfo = (PropertyInfo)memberExpression.Member; propertyInfo.SetValue(target, input); } } // Example usage: var person = new Person(); SetProperty("test", person, x => x.Name);</code>
4. Memanfaatkan Refleksi:
Refleksi menyediakan pemeriksaan masa jalan dan pengubahsuaian struktur objek. Ini membolehkan pengambilan dinamik dan penetapan nilai harta benda.
<code class="language-csharp">void SetPropertyValue(string input, object target, string propertyName) { if (!string.IsNullOrEmpty(input)) { var property = target.GetType().GetProperty(propertyName); property?.SetValue(target, input); } } // Example usage: var person = new Person(); SetPropertyValue("test", person, nameof(Person.Name));</code>
Kaedah ini menyediakan alternatif kepada hantaran rujukan sifat langsung, membolehkan manipulasi nilai sifat fleksibel dalam C#.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubahsuai Sifat C# Secara Berkesan dengan Rujukan Apabila Hantaran Terus Tidak Mungkin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!