2013-10-16 16 views
5

Tôi tò mò muốn biết nếu có như vậy một nhà điều hành mà sẽ cho phép sauTrong C# có toán tử như vậy có nghĩa là 'AndAlso' với tham chiếu đến biến đầu tiên không?

dòng ban đầu:

if(foo > 1 && foo < 10) 

mong muốn Line: (? Biến lặp lại giả định)

if(foo > 1 && < 10) 

Im tìm cách giáo dục bản thân mình một chút về cách các nhà khai thác hoạt động ở mức thấp hơn, giải thích là tại sao không được nhiều người đánh giá cao.

Xin cảm ơn,

Trả lời

2

Không, không có toán tử nào trong C#. Bạn sẽ phải lặp lại biến hoặc biểu thức để so sánh.

Tôi không biết chính thức lý do tại sao một nhà điều hành như vậy không tồn tại trong C# nhưng đây là một vài suy nghĩ:

  1. Không có ngôn ngữ khác (mà tôi biết) có một, như vậy nó là có lẽ không phải là tất cả những gì hữu ích
  2. All features starts with -100 points và cần biện minh tốt lý do tại sao cần tăng cao hơn ngưỡng cần thiết để thực sự triển khai và cũng phải biện minh cho việc đó trước hoặc thay vì các tính năng khác. Vì nó rất dễ dàng để viết các biểu hiện anyway tôi nghi ngờ nó đáp ứng tất cả các tiêu chí này.

Bạn thể (mặc dù tôi không nghĩ rằng đây sẽ là một ý tưởng tốt) tạo ra một phương pháp khuyến nông:

void Main() 
{ 
    int foo = 5; 
    if (foo.Between(1, 10)) 
     Debug.WriteLine("> 1 and < 10"); 
    else 
     Debug.WriteLine("?"); 
} 

public static class Extensions 
{ 
    public static bool Between<T>(this T value, T lowNotIncluded, T highNotIncluded) 
     where T : struct, IComparable<T> 
    { 
     return value.CompareTo(lowNotIncluded) > 0 && value.CompareTo(highNotIncluded) < 0; 
    } 
} 

Nhưng sẽ không khuyên. Một câu hỏi cần nêu ra nếu bạn muốn đi tuyến đường phương pháp mở rộng là cách xử lý tất cả các kết hợp của >, >=, <<=.

+0

Không ngôn ngữ nào có nhà điều hành như vậy? 68000 có ** hướng dẫn ** để làm điều đó! ('CHK2'). – MSalters

+0

Và xem những gì đã xảy ra với nó :) Perl có nó, mệnh để trở thành một chú thích lịch sử chỉ là tốt. –

+0

Điều gì về một trình phân tích cú pháp của trình biên dịch và/hoặc phân tích từ vựng? Cú pháp này có đặc biệt khó phân tích cú pháp không? – blt

2

Loại toán tử này không tồn tại trong C#. Nhưng tôi sẽ không sử dụng nó vì khả năng đọc và ý định của mã của bạn không rõ ràng. Thay vào đó, tôi sẽ sử dụng một phương pháp mở rộng như sau:

// using extension method 
int number = 15; 
if (number.IsBetween(0, 12)) 
{ 
    ... 
} 

// definition of extension method 
public static bool IsBetween(this int num, int lower, int upper, bool inclusive = false) 
{ 
    return inclusive 
     ? lower <= num && num <= upper 
     : lower < num && num < upper; 
} 
Các vấn đề liên quan