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
Lepaskan: 2025-01-06 01:37:40
asal
685 orang telah melayarinya

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

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

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

Penggunaan:

var value = x.CastTo(a);
Salin selepas log masuk

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!

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