Bug Report T398766
Visible to All Users

Contract.Requires for an array shouldn't check its length

created 9 years ago

Contract.Requires for array shouldn't checks its length, just for null.

Actual

C#
Contract.Requires(items != null && items.Length != 0, nameof(items) + " is null or empty.");

Expected

C#
Contract.Requires(items != null , nameof(items) + " is null.");

Mostly it is not an error passing an empty array. IMHO.

Comments (3)
AE AE
Alex Eg (DevExpress) 9 years ago

    Hi Miha,
    I totally agree with you that in case of the Contract.Requires code contract, it's not necessary to check the array length. However, we will keep such a check for the Exit Method and other contracts.

    M M
    Miha Markic - DevExpress MVP 9 years ago

      Hi Alex,

      Hm, don't know about Exit either. Empty array can be perfectly valid result as well.

      AE AE
      Alex Eg (DevExpress) 9 years ago

        Miha,
        Since CodeRush Classic, we use not only null checks but also check if array/collections/strings are not empty. It's a matter of personal style, so the best decision would be to add options so everyone would have the preferred result.

        Answers approved by DevExpress Support

        created 8 years ago

        We have fixed the issue described in this ticket and will include the fix in our next maintenance update. To apply this solution before the official update, request a hotfix by clicking the corresponding link for product versions you require.

        Note: Hotfixes may be unavailable for beta versions and updates that are about to be released.

        Additional information:

        Miha,
        We have added an option to disable length checking in Code Contracts. It will be available in the next CRR release on the Editor{Your Programming Language}\Code Actions\Code Actions Settings page.

          Disclaimer: The information provided on DevExpress.com and affiliated web properties (including the DevExpress Support Center) is provided "as is" without warranty of any kind. Developer Express Inc disclaims all warranties, either express or implied, including the warranties of merchantability and fitness for a particular purpose. Please refer to the DevExpress.com Website Terms of Use for more information in this regard.

          Confidential Information: Developer Express Inc does not wish to receive, will not act to procure, nor will it solicit, confidential or proprietary materials and information from you through the DevExpress Support Center or its web properties. Any and all materials or information divulged during chats, email communications, online discussions, Support Center tickets, or made available to Developer Express Inc in any manner will be deemed NOT to be confidential by Developer Express Inc. Please refer to the DevExpress.com Website Terms of Use for more information in this regard.