C # Contract.Result тип при сравнении с нулевым - PullRequest
1 голос
/ 16 февраля 2012

Это раздражает чем Контракт. Результат не может определить его тип в некоторых ситуациях.См. Выдержку из руководства ниже.

Возвращаемые значения метода В постусловиях к возвращаемому значению метода можно обращаться через выражение Contract.Result<T>(), где T заменяется возвращаемым типомметод.Когда компилятор не может определить тип, он должен быть указан явно. Например, компилятор C # не может определить типы для методов, которые не принимают никаких аргументов.

Я заметил, что фрагмент кода cen создает Contract.Ensures(Contract.Result<String>() != null); со строкойвыделено для редактирования.

Я что-то упустил, или я могу просто установить тип для объекта при сравнении с нулевым.т.е. Contract.Ensures(Contract.Result<Object>() != null);

1 Ответ

1 голос
/ 17 февраля 2012

Я бы подумал, что согласно теории ОО.Это если у нас есть обнуляемые типы.Тогда нуль соответствует всем (обнуляемым) типам.Поэтому это должно работать, поэтому я написал тесты ниже.

using NUnit.Framework;
using System.Diagnostics.Contracts;

namespace Tests
{
    [TestFixture]
    class EnsureResult_nunit
    {
        [Test]
        public void testA()
        {
            var z = str1();
            var y = str2();
        }

        [Test, ExpectedException]
        public void testB()
        {
            var z = str3();
        }

        [Test, ExpectedException]
        public void testC()
        {
            var y = str4();
        }


        public string str1() 
        {
            Contract.Ensures(Contract.Result<Object>() != null);
            return "";
        }

        public string str2()
        {
            Contract.Ensures(Contract.Result<Object>() == null);
            return null;
        }

        public string str3()
        {
            Contract.Ensures(Contract.Result<Object>() == null);
            return "";
        }

        public string str4()
        {
            Contract.Ensures(Contract.Result<Object>() == null);
            return "";
        }
    }
}

Все испытания пройдены.

...