Vì vậy, tôi có một thuộc tính tùy chỉnh, chúng ta hãy gọi nó MyCustomAttribute
, trong đó có một nhà xây dựng như sau:int Nullable trong Thuộc tính Constructor hoặc tài sản
public MyCustomAttribute(int? i)
{
// Code goes here
}
và tuyên bố một tài sản:
public int? DefaultProperty { get; set; }
Bây giờ nếu Tôi muốn sử dụng tài sản, tôi cần phải chuyển vào một số int
hoặc null
, đó là những gì tôi mong đợi.
Nhưng điều này đưa ra một lỗi biên dịch:
[MyCustomAttribute(1, DefaultProperty = 1)]
public int? MyProperty { get; set; }
và vì vậy thực hiện điều này:
[MyCustomAttribute(null,DefaultProperty = null)]
public int? MyProperty { get; set; }
Lỗi này là: An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type
cho cả các nhà xây dựng và bất động sản.
Tại sao điều này? Nếu tôi thay đổi các nhà xây dựng để có một int, tôi có thể vượt qua trong 0
, nhưng không null
, trong đó loại đánh bại mục đích của giá trị (mà đôi khi có thể null)
Trường hợp nào bạn đề cập đến trong tiêu đề? (Một int vô giá trị không phải là một enum.) – dtb
Bạn có thể cung cấp hai hàm tạo: một với một tham số int và một tham số không có tham số. – dtb
Vâng xin lỗi, nghĩ rằng nó đã được enum lúc đầu tiên, hóa ra đó là vô giá int – PostMan