0

私は Code Contracts にかなり慣れていません...そして問題に遭遇しました。

私は次のようなメソッドLINQクエリを持っています:

MyClass[] fields =
            (from p in rType.GetProperties()
             where p.CanRead
             let fAttr = p.GetCustomAttributes(typeof(MyClassAttribute), true).SingleOrDefault() as MyClassAttribute
             where fAttr != null
             select new MyClass(p, fAttr)).ToArray();

そして、プロジェクトにコード コントラクトを実装したいと考えています。この時点に到達するまで、すべてを正常に実行しました。静的チェッカーを実行すると、クエリで定義されている変数 p と fAttr に関するいくつかの前提条件 (Contract.Requires) を追加する必要があることが示唆されます。また、証明されていない要件がいくつかあります。

どうすればこれを解決できますか? 何か案は?

MyClass には、次の 2 つの前提条件も含まれています。

internal MyClass(PropertyInfo p, MyClassAttribute att)
    {
        Contract.Requires(p != null);
        Contract.Requires(att != null);
        ...
    }

前もって感謝します :)

4

1 に答える 1

0

これを再現できないようです。Code Contracts の最新バージョンを使用していますか?

私のコード全体は次のようになります...これはあなたのバージョンに十分近いですか?

using System;
using System.Diagnostics.Contracts;
using System.Linq;
using System.Reflection;

namespace ConsoleApplication10
{
    class Program
    {
        class MyClassAttribute : Attribute{}
        class MyClass
        {
            internal MyClass(PropertyInfo p, MyClassAttribute a)
            {
                Contract.Requires(p != null);
                Contract.Requires(a != null);
            }
        }

        static void Main(string[] args)
        {
            var rType = typeof (DateTime);

            MyClass[] result = (from p in rType.GetProperties()
             where p.CanRead
             let fAttr = p.GetCustomAttributes(typeof(MyClassAttribute), true).SingleOrDefault() as MyClassAttribute
             where fAttr != null
             select new MyClass(p, fAttr)).ToArray();

        }
    }
}
于 2011-01-19T09:57:12.223 に答える