Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya boleh mencipta, mengisih dan menapis sifat dinamik dalam C# pada masa jalan?

Bagaimanakah saya boleh mencipta, mengisih dan menapis sifat dinamik dalam C# pada masa jalan?

Linda Hamilton
Lepaskan: 2025-01-05 01:22:41
asal
629 orang telah melayarinya

How can I create, sort, and filter dynamic properties in C# at runtime?

Mencipta Sifat Dinamik dalam C

Penambahan dan Pengubahsuaian Harta Dinamik

Untuk mencipta sifat dinamik dalam kelas pada masa jalan, anda boleh menggunakan kamus untuk menyimpan nama dan nilai harta. Pertimbangkan kod berikut:

Dictionary<string, object> properties = new Dictionary<string, object>();
Salin selepas log masuk

Kamus ini boleh digunakan untuk menentukan sifat dinamik untuk kelas. Sebagai contoh, untuk menambah sifat dinamik bernama "ujian" dengan nilai 100, anda akan menulis:

properties["test"] = 100;
Salin selepas log masuk

Isih dan Menapis Sifat Dinamik

Setelah anda mencipta sifat dinamik, anda juga boleh menambah keupayaan pengisihan dan penapisan pada objek anda. Berikut ialah contoh menggunakan LINQ untuk penapisan:

var filtered = from obj in objects
             where (int)obj["test"] >= 150
             select obj;
Salin selepas log masuk

Dan berikut ialah contoh menggunakan pembanding tersuai untuk mengisih:

Comparer<int> c = new Comparer<int>("test");
objects.Sort(c);
Salin selepas log masuk

Contoh Pelaksanaan

Yang berikut lengkap sampel kod menunjukkan penciptaan, pengubahsuaian, pengisihan dan penapisan sifat dinamik dalam C#:

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApplication1
{
    class ObjectWithProperties
    {
        Dictionary<string, object> properties = new Dictionary<string, object>();

        public object this[string name]
        {
            get
            {
                if (properties.ContainsKey(name))
                {
                    return properties[name];
                }
                return null;
            }
            set
            {
                properties[name] = value;
            }
        }
    }

    class Comparer : IComparer where T : IComparable
    {
        string m_attributeName;

        public Comparer(string attributeName)
        {
            m_attributeName = attributeName;
        }

        public int Compare(ObjectWithProperties x, ObjectWithProperties y)
        {
            return ((T)x[m_attributeName]).CompareTo((T)y[m_attributeName]);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // create some objects and fill a list
            var obj1 = new ObjectWithProperties();
            obj1["test"] = 100;
            var obj2 = new ObjectWithProperties();
            obj2["test"] = 200;
            var obj3 = new ObjectWithProperties();
            obj3["test"] = 150;
            var objects = new List(new ObjectWithProperties[] { obj1, obj2, obj3 });

            // filtering:
            Console.WriteLine("Filtering:");
            var filtered = from obj in objects
                           where (int)obj["test"] >= 150
                           select obj;
            foreach (var obj in filtered)
            {
                Console.WriteLine(obj["test"]);
            }

            // sorting:
            Console.WriteLine("Sorting:");
            Comparer c = new Comparer("test");
            objects.Sort(c);
            foreach (var obj in objects)
            {
                Console.WriteLine(obj["test"]);
            }
        }
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah saya boleh mencipta, mengisih dan menapis sifat dinamik dalam C# pada masa jalan?. 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