Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menghantar Jenis Tanpa Nama dalam C# untuk Mengakses Sifatnya?

Bagaimanakah Saya Boleh Menghantar Jenis Tanpa Nama dalam C# untuk Mengakses Sifatnya?

Susan Sarandon
Susan Sarandonasal
2025-01-06 01:37:40657semak imbas

How Can I Cast an Anonymous Type in C# to Access Its Properties?

Hantar Jenis Tanpa Nama untuk Mengakses Sifat

Menghantar jenis awanama kembali kepada jenis asalnya boleh menimbulkan masalah apabila mengakses sifatnya. Untuk menyelesaikannya, seseorang boleh menggunakan helah untuk membuat kesimpulan jenis yang betul.

Menipu Pengkompil

Kaedah Cast menerima objek x dan jenis pemegang jenis Pemegang jenis yang dikehendaki. Dengan menghantar jenis tanpa nama a sebagai typeHolder, pengkompil boleh membuat kesimpulan jenis untuk menghantar x kepada:

private static T Cast<T>(T typeHolder, Object x)
{
    // typeHolder above is just for compiler magic
    // to infer the type to cast x to
    return (T)x;
}

Penggunaan:

var a = new { Id = 1, Name = "Bob" };
TestMethod(a);
...
private static void TestMethod(Object x)
{
    // This is a dummy value, just to get 'a' to be of the right type
    var a = new { Id = 0, Name = "" };
    a = Cast(a, x);
    Console.Out.WriteLine(a.Id + ": " + a.Name);
}

Kaedah Casting Alternatif

Kaedah alternatif ialah mencipta kaedah sambungan CastTo, yang mengambil nilai sebagai pelakon dan jenis sasaran:

private static T CastTo<T>(this Object value, T targetType)
{
    // targetType above is just for compiler magic
    // to infer the type to cast value to
    return (T)value;
}

Penggunaan:

var value = x.CastTo(a);

Cadangan

Walaupun teknik ini membenarkan penghantaran jenis tanpa nama, ia adalah disyorkan untuk menggunakan jenis sebenar untuk kejelasan dan kemudahan penggunaan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghantar Jenis Tanpa Nama dalam C# untuk Mengakses Sifatnya?. 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