2010-12-10 31 views
23

IntelliSense cho tôi biết "Biểu thức không thể chứa các phương thức nặc danh hoặc biểu thức lambda". Có thật không? Tôi đã không nhận thức được điều này áp đặt giới hạn. Điều này có đúng không? Tôi đoán tôi đang tìm kiếm một kiểm tra sanity ở đây ...C# Phương thức thuộc tính không thể chứa Biểu thức Lambda?

 
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

Tôi tò mò về những gì bạn mong đợi điều này sẽ làm. – FrustratedWithFormsDesigner

+2

Ý định của tôi chỉ cho phép ánh xạ đơn giản cho một số mục đích cấu hình. – Didaxis

+0

Trong ví dụ này, cái gì sẽ được ánh xạ tới cái gì? Phương thức 'Usage' có được ánh xạ tới lambda trong thuộc tính' Foo' không? Khi nào lambda sẽ thực hiện? Nó không rõ ràng với tôi nhưng điều này có thể là một ý tưởng thú vị ... – FrustratedWithFormsDesigner

Trả lời

27

Có điều này là chính xác. Giá trị thuộc tính được giới hạn hằng số của các loại sau đây

  • loại đơn giản (bool, byte, char, short, int, long, float, và đôi)
  • chuỗi
  • System.Type
  • enums
  • đối tượng (đối số cho một tham số thuộc tính của loại đối tượng phải là một giá trị không đổi của một trong những loại trên.)
  • mảng
  • một chiều của bất kỳ của các loại trên

Tham chiếu: http://msdn.microsoft.com/en-us/library/aa288454(VS.71).aspx

+6

Cảm ơn bạn. Đó là loại một con số thấp. – Didaxis

+0

Meh. Và ở đó tôi đã nghĩ rằng cuối cùng tôi đã tìm ra một giải pháp mà tôi thấy có thể chấp nhận được cho INotifyPropertyChanged. Ah, quay lại bảng vẽ. – tobriand

Các vấn đề liên quan