2010-11-11 39 views
6

Có thể trong C# để có một số loại danh sách kiểm tra khi biên dịch để đảm bảo các tham số cho các hàm là các giá trị nhất định không?Có thể kiểm tra giá trị khi biên dịch không?

Ví dụ: tôi có thể kiểm tra tham số của hàm này luôn lớn hơn 10 tại thời gian biên dịch không?

void SomeFunction (1); < --- Biên dịch lỗi ở đây

+0

điều gì về cách viết điều kiện kiểm tra bên trong các chức năng cụ thể? –

+0

Tôi muốn kiểm tra thời gian biên dịch –

+0

Bạn cần một ngôn ngữ có tương tác thời gian biên dịch, như Scheme/LISP. Điều đó nói rằng, nó sẽ chỉ tốt cho các hằng số tính toán thời gian biên dịch. – leppie

Trả lời

6

Hãy xem Code Contracts. Nó khá mạnh mẽ; nó có thể được sử dụng cho cả kiểm tra thời gian chạy và xác minh tĩnh. Ngoài ra, bạn có thể định cấu hình để xử lý các hợp đồng chưa được chứng minh dưới dạng cảnh báo/lỗi thời gian biên dịch.

void SomeFunction(int number) 
{ 
    Contract.Requires<ArgumentOutOfRangeException>(number > 10) 
    ... 
} 
+0

wow! đó thực sự, thực sự, ... NICE! –

3

Tôi không biết cách nào để làm điều này tại thời gian biên dịch, bạn có thể được tốt hơn bằng cách sử dụng một đếm và chỉ cung cấp các giá trị trong đó liệt kê được trên 10

Nhưng, tất nhiên, điều này giới hạn bạn với các giá trị cụ thể mà có thể không phải là những gì bạn muốn.

Có những lựa chọn khác có sẵn cho bạn như:

  • lỗi thời gian chạy, giống như ném một ngoại lệ.
  • bỏ qua thời gian chạy, chẳng hạn như câu lệnh if thoát khỏi hàm cho các giá trị không nằm trong phạm vi của bạn.

Tại một pinch, bạn có thể xử lý mã nguồn với một tệp thực thi khác kiểm tra các giá trị được chuyển vào hàm của bạn, nhưng điều này sẽ chỉ hoạt động cho các cuộc gọi có thể được kéo xuống đối số không đổi. Và, nếu chúng là các đối số không đổi, bạn sẽ bắt chúng trong thời gian chạy trong giai đoạn thử nghiệm, lâu trước khi sản phẩm của bạn nằm trong phạm vi 100 feet của khách hàng hoặc người thử nghiệm beta. Trừ khi phạm vi kiểm tra của bạn không lên đến đầu nhưng sau đó đó là một vấn đề khác.

Nếu không, kiểm tra thời gian chạy là lựa chọn duy nhất của bạn.

0

Nếu nó không phải là một chương trình rất đơn giản, tôi nghĩ điều này là không thể. Nó có vẻ liên quan đến Halting problem.

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