Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengakses Objek Jenis Tanpa Nama C# di Luar Skopnya?

Bagaimanakah Saya Boleh Mengakses Objek Jenis Tanpa Nama C# di Luar Skopnya?

Barbara Streisand
Barbara Streisandasal
2025-01-04 18:48:39395semak imbas

How Can I Access C# Anonymous Type Objects Outside Their Scope?

Mengakses Objek Jenis Tanpa Nama C# Di Luar Skopnya

Dalam C#, jenis tanpa nama dicipta menggunakan kata kunci baharu diikuti dengan set pemula sifat dalam pendakap kerinting. Ia berguna apabila anda perlu mencipta objek sementara yang tidak perlu dinamakan atau ditakrifkan lagi. Walau bagaimanapun, mengakses objek jenis tanpa nama di luar skop tempat ia diisytiharkan boleh mencabar.

Untuk memahami masalah, pertimbangkan kod berikut:

void FuncB()
{
    var obj = FuncA();
    Console.WriteLine(obj.Name);
}

object FuncA()
{
    var a = (from e in DB.Entities
             where e.Id == 1
             select new { Id = e.Id, Name = e.Name }).FirstOrDefault();

    return a;
}

Dalam kod ini, FuncA() mengembalikan jenis tanpa nama dengan dua sifat: Id dan Nama. Walau bagaimanapun, apabila FuncB() cuba mengakses sifat Name, ia akan menghadapi ralat kerana pengkompil tidak dapat menentukan sifat jenis tanpa nama yang dikembalikan oleh FuncA().

Satu penyelesaian yang berpotensi ialah menggunakan "cast by example":

public void FuncB()
{
    var example = new { Id = 0, Name = string.Empty };

    var obj = CastByExample(FuncA(), example);
    Console.WriteLine(obj.Name);
}

private object FuncA()
{
    var a = from e in DB.Entities
            where e.Id == 1
            select new { Id = e.Id, Name = e.Name };

    return a.FirstOrDefault();
}

private T CastByExample<T>(object target, T example)
{
    return (T)target;
}

Teknik "cast by example" ini melibatkan mencipta objek contoh daripada jenis tanpa nama yang diingini dan kemudian menghantar objek yang dikembalikan kepada jenis contoh. Walaupun ia membenarkan akses kepada sifat jenis tanpa nama, ia biasanya tidak disyorkan kerana ia boleh mengelirukan dan terdedah kepada ralat.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengakses Objek Jenis Tanpa Nama C# di Luar Skopnya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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