SORU
3 HAZİRAN 2009, ÇARŞAMBA


Nasıl C dinamik özellikler oluştururum#?

Bir statik özellikleri bir dizi ile bir sınıf oluşturmak için arıyorum. Çalışma zamanında, bu nesneyi veritabanından diğer dinamik özellikler eklemek mümkün olmak istiyorum. Ayrıca bu nesneler, sıralama ve filtreleme yetenekleri eklemek istiyorum.

Nasıl C yapacağım#?

CEVAP
3 HAZİRAN 2009, ÇARŞAMBA


Bir sözlük kullanabilirsiniz

Dictionary<string,object> properties;

Benzer bir şey yapılır çoğu durumda, bu gibi bitti sanırım.< / ^ br . Herhangi bir durumda, sen-cekti kazanmak bir şey yaratmak bir "gerçek" özelliği ile set ve get set, yana olurdu oluşturulan çalışma zamanı sırasında ve değil kullanarak kodunuzu...

İşte bir örnek, filtreleme ve sıralama olası bir uygulama (hata denetleme) göstermek:

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<T> : IComparer<ObjectWithProperties> 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<ObjectWithProperties>(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<int> c = new Comparer<int>("test");
            objects.Sort(c);
            foreach (var obj in objects) {
                Console.WriteLine(obj["test"]);
            }
        }

    }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:
C#

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Nick Pitera

    Nick Pitera

    8 NİSAN 2006
  • THELIFEOFPRICE

    THELIFEOFPRI

    16 Mart 2011
  • TouchePro

    TouchePro

    27 EYLÜL 2007