Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Meluluskan Hartanah secara Berkesan dengan Rujukan dalam C#?

Bagaimanakah Saya Boleh Meluluskan Hartanah secara Berkesan dengan Rujukan dalam C#?

Patricia Arquette
Lepaskan: 2025-01-11 08:54:42
asal
412 orang telah melayarinya

How Can I Effectively Pass Properties by Reference in C#?

Melalui sifat dengan rujukan dalam C#

Meluluskan sifat melalui rujukan dalam C# bukanlah perkara remeh kerana sifat tidak mendedahkan rujukan kepada medan sandarannya. Walau bagaimanapun, terdapat cara untuk mencapai tingkah laku yang serupa.

1. Nilai pulangan:

Kaedah ini mengembalikan nilai input jika ia tidak batal atau kosong, jika tidak mengembalikan nilai sifat asal.

<code class="language-csharp">string GetString(string input, string output)
{
    if (!string.IsNullOrEmpty(input))
    {
        return input;
    }
    return output;
}

void Main()
{
    var person = new Person();
    person.Name = GetString("test", person.Name);
    Debug.Assert(person.Name == "test");
}</code>
Salin selepas log masuk

2. Perwakilan:

Menggunakan perwakilan, nilai input boleh diberikan kepada sifat melalui operasi perwakilan.

<code class="language-csharp">void SetStringValue(string input, Action<string> setOutput)
{
    if (!string.IsNullOrEmpty(input))
    {
        setOutput(input);
    }
}

void Main()
{
    var person = new Person();
    SetStringValue("test", value => person.Name = value);
    Debug.Assert(person.Name == "test");
}</code>
Salin selepas log masuk

3. Ungkapan LINQ:

Kaedah ini menggunakan ungkapan LINQ untuk mendapatkan semula medan sandaran harta dan menetapkan nilai input. (Contoh kod kaedah ini mengandungi ralat sintaks dalam teks asal dan tidak boleh dijalankan secara langsung. Contoh yang diperbetulkan disediakan di bawah, tetapi ia mungkin perlu dilaraskan mengikut situasi sebenar.)

<code class="language-csharp">void SetStringProperty<T, TProperty>(string input, T target, Expression<Func<T, TProperty>> propertyExpression)
{
    if (!string.IsNullOrEmpty(input))
    {
        var memberExpression = (MemberExpression)propertyExpression.Body;
        var propertyInfo = (PropertyInfo)memberExpression.Member;
        propertyInfo.SetValue(target, Convert.ChangeType(input, propertyInfo.PropertyType));
    }
}


void Main()
{
    var person = new Person();
    SetStringProperty("test", person, x => x.Name);
    Debug.Assert(person.Name == "test");
}</code>
Salin selepas log masuk

4. Refleksi:

Refleksi boleh digunakan untuk mengakses medan asas harta dan menetapkan nilai input.

<code class="language-csharp">void SetPropertyValue(string input, object target, string propertyName)
{
    if (!string.IsNullOrEmpty(input))
    {
        var prop = target.GetType().GetProperty(propertyName);
        prop.SetValue(target, input);
    }
}

void Main()
{
    var person = new Person();
    SetPropertyValue("test", person, nameof(Person.Name));
    Debug.Assert(person.Name == "test");
}</code>
Salin selepas log masuk

Perlu diambil perhatian bahawa walaupun kaedah menggunakan refleksi dan ungkapan LINQ boleh mencapai tujuan, ia agak tidak cekap, dan kebolehbacaan dan kebolehselenggaraan kod juga mungkin dikurangkan. Adalah disyorkan untuk memberi keutamaan untuk mengembalikan nilai atau mewakilkan kaedah melainkan terdapat keperluan khas. Selain itu, semua contoh memerlukan kelas Person untuk ditakrifkan, mengandungi atribut Name bernama string.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meluluskan Hartanah secara Berkesan dengan Rujukan dalam C#?. 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