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
1040 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.

string GetString(string input, string output)
{
    return string.IsNullOrEmpty(input) ? output : input;
}

// Example usage:
var person = new Person();
person.Name = GetString("test", person.Name);
Salin selepas log masuk

2. Pendekatan Berasaskan Perwakilan:

Perwakilan membolehkan rujukan fungsi lulus sebagai argumen. Ini membenarkan pengubahsuaian nilai harta dalam skop perwakilan.

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

3. Memanfaatkan Ungkapan LINQ:

Ekspresi LINQ menawarkan akses kepada refleksi, membolehkan tetapan nilai sifat dinamik.

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);
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.

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));
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!

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