2009-10-13 1 views
0

코드 계약을 처음 접했을 때 문제가 발생했습니다.코드 계약을 쿼리에 사용하는 방법은 무엇입니까?

나는 이런 식으로 뭔가를 이동하는 방법에 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)을 추가해야한다고 제안합니다. 또한 증명되지 않은 몇 가지 요구 사항이 있습니다.

어떻게 해결할 수 있습니까? 어떤 아이디어? 사전에

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

감사합니다 :) 내가 이것을 재현 할 수없는 것

답변

0

:

MyClass에 또한 두 개의 전제 조건이 포함되어 있습니다. 최신 버전의 코드 계약을 사용하고 있습니까?

전체 코드는 다음과 같습니다.이 버전이 내 버전에 충분히 근접합니까?

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(); 

     } 
    } 
} 
+1

오, 이런, 그냥 내 질문에 답변을 필터링 내 StackOverflow 있었 실현, 잠시 동안 오래된 질문에 대답 : ... P는 – porges