2010-08-09 42 views
10

Tôi nhận được lỗi này,Giá trị mặc định cho hàm tạo thuộc tính?

lỗi CS0182: Một cuộc tranh cãi thuộc tính phải là một biểu thức hằng số, typeof biểu hiện hoặc tạo mảng biểu hiện của một loại tham số thuộc tính

Khi tôi cố gắng viết một cái gì đó như thế này

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)] 
public class UrlAttribute : Attribute 
{ 
    public UrlAttribute(string pattern, string name=null) 
    { 
     // ... 

Nó thậm chí không hiển thị số dòng, nhưng nó biến mất khi tôi lấy ra =null bit.

Trên thực tế, lỗi chỉ xảy ra cả khi tôi cung cấp một giá trị mặc định dựa vào nó (ví dụ, tôi bỏ qua nó) như vậy

[Url("/index")] 

Tôi tò mò muốn biết tại sao điều này? Làm thế nào là "null" không phải là một biểu thức liên tục?

+1

Tôi đã nhận được phản hồi từ Microsoft và đã cập nhật phản hồi của tôi cho phù hợp. – kbrimington

+1

@kbrimington: Cảm ơn bạn đã cập nhật! Nghe có vẻ như chúng ta sẽ phải đợi trước khi bản sửa lỗi được phát hành ... ồ, nó không mấy quan trọng :) – mpen

+0

tên đối tượng = null cũng đưa ra lỗi này. – ghord

Trả lời

9

Tôi đang gọi 'lỗi'.

Tôi hy vọng bạn không phiền, tôi đã báo cáo lỗi cho Microsoft.

UPDATE:

tôi đã nhận được những phản hồi sau đây từ Microsoft ngày hôm nay, nhấn mạnh thêm.

Cảm ơn bạn đã báo cáo sự cố này bạn đã gặp phải với Visual Studio!

Chúng tôi đã sửa các tham số chuỗi tùy chọn trên các thuộc tính trong mã của chúng tôi. Bạn sẽ thấy sửa chữa này trong phiên bản của Visual Studio sau VS 2010.

Alex Turner

Chương trình quản lý

Visual Basic và C# Compiler

+0

Đừng bận tâm chút nào. Tôi nhận được một 404 khi tôi làm theo liên kết đó mặc dù. Nó yêu cầu tôi đăng nhập, và sau đó nói rằng trang này không được tìm thấy. – mpen

+0

@Mark: Lạ. Tôi đã thử nó và nó hoạt động tốt.Có lẽ đó là một điều khoản. Tôi sẽ giữ cho bạn được đăng. Tôi đã nhận được một thư xác nhận tự động cho biết nó đang được chuyển đến nhóm thích hợp. Chúng ta sẽ xem chuyện gì xảy ra. – kbrimington

+0

Nó đã đề cập đến quyền - "Nội dung mà bạn yêu cầu không thể được tìm thấy hoặc bạn không có quyền xem nó." Vì vậy, đó có thể là nó. – mpen

1

Thuộc tính đã cung cấp các đối số mặc định có thể. Bạn chỉ cần tạo thuộc tính công khai trên thuộc tính và những thuộc tính đó có thể được chỉ định trong quá trình khởi tạo thuộc tính. Nó đã hoạt động, nó đã được hiểu rõ và nó phù hợp với cách các thuộc tính framework hoạt động. Vậy ... tại sao không chỉ sử dụng cơ chế đó thay vì cố gắng thêm các tham số mặc định vào constructor?

+1

Đó không phải là câu hỏi :) Nhưng lý do "tại sao" là vì C# 4 đã thêm các tham số có tên. Với các thuộc tính, có vẻ như bây giờ chúng ta có * hai * cách xác định các tham số có tên, ngoại trừ việc chúng ta không có, bởi vì cái này làm tăng một lỗi; Tôi đã cố gắng giữ cho ứng dụng phù hợp bằng cách gắn bó với một phương pháp. Tuy nhiên, tôi không nói rằng đó là một ý tưởng tốt để thêm args mặc định, tôi chỉ tự hỏi * tại sao * chúng ta không thể. – mpen

+0

Nó có thể là một lỗi, nhưng tôi không nghĩ rằng nó là quan trọng bởi vì đã có một cách tốt hơn để làm điều đó. Xin lỗi rằng C# không hoàn toàn trực giao. – siride

+1

Đối với tôi đó chắc chắn là một lỗi. Bạn có thể biên dịch mã với định nghĩa của thuộc tính, nhưng bất kỳ mã nào sử dụng nó đều không thể biên dịch được. – user276648

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