2009-10-10 23 views

Trả lời

11

Vì không có toán tử "ngắn hạn". Cả hai toán hạng được khuyến khích int.

Từ phần 7.7.5 của C# 3 spec:

nhà khai thác Các phép trừ được xác định trước được liệt kê dưới đây. Các toán tử tất cả trừ y khỏi x.

  • Integer trừ:

    int operator –(int x, int y); 
    uint operator –(uint x, uint y); 
    long operator –(long x, long y); 
    ulong operator –(ulong x, ulong y); 
    

    Trong một bối cảnh kiểm tra, nếu sự khác biệt là bên ngoài phạm vi của các loại quả, một System.OverflowException được ném.

(. Và sau đó có dấu chấm động trừ)

+0

Nếu chỉ họ cho phép các nhà khai thác mở rộng ...;) – RCIX

+1

Eric Lippert đã nhận xét về điều này (liên quan đến Enums) : http://blogs.msdn.com/ericlippert/archive/2005/10/19/fyi-c-2-0-has-a-breaking-change-in-enum-subtraction.aspx – jasonh

+0

Tôi thường muốn điều này bằng một vài ngôn ngữ ... nhưng sau đó tôi nhớ có bao nhiêu người sẽ lạm dụng nó ra khỏi nó. –

1

Để làm cho mọi việc một chút dễ dàng hơn, bạn chỉ có thể viết một phương pháp khuyến nông như thế này:

public static class NumericExtensions 
{ 
    public static short Subtract(this short target, short value) 
    { 
     return (short)(target - value); 
    } 
} 

Những người khác đã trả lời câu hỏi của bạn ... :)

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