Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengubahsuai Sifat C# Secara Berkesan dengan Rujukan Apabila Hantaran Terus Tidak Mungkin?

Bagaimanakah Saya Boleh Mengubahsuai Sifat C# Secara Berkesan dengan Rujukan Apabila Hantaran Terus Tidak Mungkin?

Mary-Kate Olsen
Lepaskan: 2025-01-11 09:50:42
asal
974 orang telah melayarinya

How Can I Effectively Modify C# Properties by Reference When Direct Passing Isn't Possible?

Mengubah suai Sifat C# dengan Rujukan: Penyelesaian

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

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

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

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

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!

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