Heim >Backend-Entwicklung >C++ >Wie kann ich zur Laufzeit dynamische Eigenschaften in C# erstellen, sortieren und filtern?

Wie kann ich zur Laufzeit dynamische Eigenschaften in C# erstellen, sortieren und filtern?

Linda Hamilton
Linda HamiltonOriginal
2025-01-05 01:22:41623Durchsuche

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

Erstellen dynamischer Eigenschaften in C

Hinzufügen und Ändern dynamischer Eigenschaften

Um dynamische Eigenschaften in einer Klasse zur Laufzeit zu erstellen, können Sie ein Wörterbuch verwenden Speichern Sie Eigenschaftsnamen und -werte. Betrachten Sie den folgenden Code:

Dictionary<string, object> properties = new Dictionary<string, object>();

Mit diesem Wörterbuch können dynamische Eigenschaften für die Klasse definiert werden. Um beispielsweise eine dynamische Eigenschaft namens „test“ mit einem Wert von 100 hinzuzufügen, würden Sie schreiben:

properties["test"] = 100;

Dynamische Eigenschaften sortieren und filtern

Sobald Sie dynamische Eigenschaften erstellt haben, können Sie Sie können Ihren Objekten auch Sortier- und Filterfunktionen hinzufügen. Hier ist ein Beispiel für die Verwendung von LINQ zum Filtern:

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

Und hier ist ein Beispiel für die Verwendung eines benutzerdefinierten Vergleichers zum Sortieren:

Comparer<int> c = new Comparer<int>("test");
objects.Sort(c);

Beispielimplementierung

Das Folgende ist vollständig Das Codebeispiel demonstriert die Erstellung, Änderung, Sortierung und Filterung dynamischer Eigenschaften in 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"]);
            }
        }
    }
}

Das obige ist der detaillierte Inhalt vonWie kann ich zur Laufzeit dynamische Eigenschaften in C# erstellen, sortieren und filtern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn