Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengubahsuai Sifat C# Dengan Berkesan Apabila Rujukan Laluan Terus Tidak Disokong?

Bagaimanakah Saya Boleh Mengubahsuai Sifat C# Dengan Berkesan Apabila Rujukan Laluan Terus Tidak Disokong?

Susan Sarandon
Lepaskan: 2025-01-11 06:23:48
asal
866 orang telah melayarinya

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

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>
Salin selepas log masuk

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:

  • Pengubahsuaian Nilai Pulangan: Pendekatan paling mudah ialah mengembalikan nilai yang diubah suai:
<code class="language-csharp">public string GetString(string inputString)
{
    return string.IsNullOrEmpty(inputString) ? this.WorkPhone : inputString;
}</code>
Salin selepas log masuk
  • Kemas Kini Berasaskan Perwakilan: Gunakan perwakilan untuk mengemas kini harta:
<code class="language-csharp">public void GetString(string inputString, Action<string> updateWorkPhone)
{
    if (!string.IsNullOrEmpty(inputString))
    {
        updateWorkPhone(inputString);
    }
}</code>
Salin selepas log masuk
  • Pendekatan Ungkapan LINQ: Kaedah yang lebih maju menggunakan ungkapan 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>
Salin selepas log masuk
  • Pengubahsuaian Berasaskan Refleksi: Reflection menawarkan akses dan pengubahsuaian harta dinamik:
<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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan