2009-10-29 28 views
10

Anonim bir türe ait özellik adını dinamik olarak ayarlamak için herhangi bir yol var mı?Dinamik olarak bir C# anonim türün özellik adını ayarlama

Normalde böyle yapardım:

var anon = new { name = "Kayes" }; 

Şimdi bu isim bir XML dosyası veya bir veritabanından gelebilir, böylece dinamik özelliğin adını (veya tanımlayıcı) ayarlamak istiyorum .


Yanıtlarınız için teşekkürler. Hayır, ihtiyacım kesinlikle tüm sıkıcı alternatiflere değmez. Sadece kodumu takım liderinin geliştirdiği mevcut bir kütüphaneyle uyumlu hale getirmek istedim. Ancak kütüphaneyi, kolayca çözülebilmeleri için Sözlük türlerini desteklemek üzere güncellemeye karar verdik.

Pete, .NET dinamik türleri 4.0

sayesinde öğrenmek için çok heyecanlıyım.

+0

bkz: http://stackoverflow.com/questions/3740021/how to-dinamik-yeni-isimsiz sınıf – nawfal

cevap

2

Büyük miktarda yansıma olmadan, muhtemelen yaptığınız şeyden yararlanmak istediğinizden daha moreso. Belki de, anahtar adı özellik adı olan bir Sözlük kullanarak bakmalısınız.

0

Derleyici, özellik adı hakkında bilgi sahibi olmalı, aksi takdirde sizin için anonim tür oluşturamaz.

Yani, hayır, gerçek özellik adı derleme zamanında bilinmedikçe (veritabanıyla veya bir şeyle bazı VS tarafından oluşturulan sihir aracılığıyla), bu mümkün değildir.

3

Bu, tür anonim olsa bile, dinamik bir tür olmadığından mümkün değildir. Bu hala statik bir tiptir ve bunun hakkında derleme zamanında bilinmesi gerekir.

Gerçek dinamik sınıflar oluşturmak için .NET 4.0 "dinamik" anahtar sözcüğünü incelemek isteyebilirsiniz. ...

0

Dinamik özellikler compiling code at runtime ile yapılabilir ama bu sanırım sizin gereksinimizin olurdu. Dinamik bilgilerden statik bir yapı oluşturmak istersiniz. Çalışmayacak, düşün. Davanız için bir sözlük kullanın.

0

Hayır'ı

1

Belirtildiği gibi, özellik adını değiştiremezsiniz; Örneğin, buna karşı nasıl kodlarsınız? Ancak, bu veri bağlama için ise, çalışma zamanında özelliklerin görünen adını bükmek için bazı hileler yapabilirsiniz - örneğin ICustomTypeDescriptor/TypeDescriptionProvider (ve özel bir PropertyDescriptor).

Çok sayıda iş; o Başka bir seçenek, özel bir niteliktir ... gerçekten buna değer için

gerekir: Daha yeni C# sürümleri için

using System; 
using System.ComponentModel; 
using System.Windows.Forms; 
class MyDisplayNameAttribute : DisplayNameAttribute { 
    public MyDisplayNameAttribute(string value) : base(value) {} 
    public override string DisplayName { 
     get { 
      return @"/// " + base.DisplayNameValue + @" \\\"; 
     } 
    } 
} 
class Foo { 
    [MyDisplayName("blip")] 
    public string Bar { get; set; } 
    [STAThread] 
    static void Main() { 
     Application.EnableVisualStyles(); 
     using (Form form = new Form { 
      Controls = { 
       new PropertyGrid { 
        Dock = DockStyle.Fill, 
        SelectedObject = new Foo { Bar = "abc"}} 
      } 
     }) { 
      Application.Run(form); 
     } 
    } 
} 
İlgili konular