2010-12-10 18 views
23

IntelliSense, "İfade, anonim yöntemler veya lambda ifadeleri içeremez" diyor. Gerçekten mi? Bu dayatılan sınırlamanın farkında değildim. Bu doğru mu? Sanırım bir akıl hastanesine bakıyorum ...C# Yöntem Öznitelik bir Lambda İfadesi içeremez mi?

 
public delegate bool Bar(string s); 

[AttributeUsage(AttributeTargets.All)] 
public class Foo : Attribute 
{ 
    public readonly Bar bar; 

    public Foo(Bar bar) 
    { 
     this.bar = bar; 
    } 
} 

public class Usage 
{ 
    [Foo(b => b == "Hello World!")]  // IntelliSense Complains here 
    public Usage() 
    { 
    } 
} 
+3

Bunun için ne beklediğinizi merak ediyorum. – FrustratedWithFormsDesigner

+2

Niyetim, yalnızca bazı yapılandırma amaçları için basit bir eşleme sağlamaktı. – Didaxis

+0

Bu örnekte neye eşlenecek? 'Usage' yöntemi 'Foo' özniteliğinde lambda ile eşlenecek mi? Lambda ne zaman çalışır? Bana açık değil ama bu ilginç bir fikir olabilir ... – FrustratedWithFormsDesigner

cevap

27

Evet bu doğru. değerleri aşağıdaki türlerden

  • Basit türleri (bool, bayt, karakter, kısa, int, uzun, şamandıra ve çift)
  • dize
  • System.Type
  • çeteleler sabitleri ile sınırlıdır Öznitelik
  • nesnesi (tip nesnenin bir özelliği, parametre argüman yukarıda türlerinden biri sabit bir değer olmalıdır.), yukarıdaki herhangi türde bir
  • Tek boyutlu diziler

Referans: http://msdn.microsoft.com/en-us/library/aa288454(VS.71).aspx

+6

teşekkürler. Bu bir serseri. – Didaxis

+0

Meh. Ve orada, sonunda INotifyPropertyChanged için kabul edilebilir bulduğum bir çözüm bulmayı düşünmüştüm. Ah, çizim tahtasına geri dönün. – tobriand