2013-01-11 3 views

답변

1

이러한 규칙을 작성하려면 해당 속성 접근 자 및 필드를 어떻게 든 참여시켜야합니다.

  1. 당신은 속성 게터/세터 읽고/할당 필드 (하나 개의 필드)

  2. 당신은 필드와 프로퍼티의 이름에 패턴을 정의 할 수있는 확인할 수 있습니다 내가 진행하는 두 가지 방법을 상상할 수

첫 번째 규칙은 같이 볼 수 있었다 (예를 들어 모든 필드 이름이 두 글자로 시작되어, 속성은 m_Foo 필드 에 해당) :

// <Name>Use Automatic Property</Name> 
warnif count > 0 
from t in Application.Types 

from f in t.Fields 
where !f.Name.Contains('<') // Eliminate generated by compiler fields 

let getter = (from m in t.Methods 
where m.IsPropertyGetter && 
     m.FieldsReadButNotAssigned.Contains(f) && 
     m.FieldsUsed.Count() == 1 
select m) 

let setter = (from m in t.Methods 
where m.IsPropertySetter && 
     m.FieldsAssigned.Contains(f) && 
     m.FieldsUsed.Count() == 1 
select m) 

where getter.Count() > 0 || setter.Count() > 0 

select new { f, getter, setter } 

두 번째 규칙은 같이 수 : 두 번째 규칙은 긍정적를 놓칠 수도 있지만

// <Name>Use Automatic Property</Name> 
warnif count > 0 
from t in Application.Types 

from f in t.Fields 
where !f.Name.Contains('<') // Eliminate generated by compiler fields 

// Here we consider that field name is prefixed with two any characters 
where f.Name.Length > 2 
let name = f.Name.Substring(2, f.Name.Length -2) 

let getter = (from m in t.Methods 
where m.IsPropertyGetter && 
     m.SimpleName == "get_" + name 
select m).SingleOrDefault() 

let setter = (from m in t.Methods 
where m.IsPropertySetter && 
     m.SimpleName == "set_" + name 
select m).SingleOrDefault() 

where getter != null || setter != null 

select new { f, getter, setter } 

, 첫 번째 규칙은 많은 거짓을 리턴합니다. 어쩌면 우리는 두 가지를 혼합하여 작성할 수 있습니다 (이름에 부분적으로 필드 이름을 포함하는 속성 이름과 같은 패턴 사용).

enter image description here

관련 문제