2014-04-15 4 views
2

내 이전 질문에이어서, Transaction 클래스에 source이라는 nullablechar이라는 이름이 있습니다.Fluent apply RuleFor가 값이 null이 아닌 경우에만

//source isnt required but when present must be 1 character 'I' or 'M'    
    RuleFor(transaction => transaction.source.ToString()) 
     .Matches("^[IM]?$")     
     .When(t => t.source.Value != null); 
Matches으로

When 나는 때문에 변환 할 수없는 존재에 새 Transaction 객체가 생성 될 때, 소스 속성이 null 경우, 응용 프로그램이 실패, 그러나 .ToString() 방법을 사용하고하는 char을 사용할 수 없습니다 null의 소스는 입니다.

는 사람 만 소스가 null없는 경우 소스 에 대한 유효성 검사를 실행하는 방법을 제안 할 수 있습니다? 나는 내가 작성한 When 표현식이 이것을 할 것이라고 가정하고, 소스가 null 일 경우 유효성 검증 프로세스의이 부분을 생략하지만 유효성 검증의 부분을 ToString()과 관계없이 처리하려고 시도하므로 오류가 발생합니다.

+0

나는 당신의 제목을 편집했습니다. 질문 제목에 사용 된 언어에 대한 정보가 없으면 이해할 수없는 경우를 제외하고는 해당 정보를 포함하지 마십시오. 태그는 이러한 용도로 사용됩니다. 또한 "[질문에"제목에 "태그"를 포함해야합니까?] "(http://meta.stackexchange.com/q/19190/193440), 컨센서스는"아니오, 그렇지 않아야합니다. – chridam

답변

3

MatchesWhenchar 데이터 타입에 사용할 수 있습니다. 나는 이런 식으로 뭔가를 제안

...

public class Transaction 
{ 
    public char? source { get; set; } 
} 


public class CustomerValidator : AbstractValidator<Transaction> 
{ 
    public CustomerValidator() 
    { 
     RuleFor(t => t.source) 
      .Must(IsValidSource); 
    } 


    private bool IsValidSource(char? source) 
    { 
     if (source == 'I' || source == 'M' || source == null) 
      return true; 
     return false;      
    } 
} 
3

나는 전체 문맥을 모르지만 나는 하나의 가장 확실한 해결책은 여기를 참조 :

RuleFor(transaction => transaction.source != null ? transaction.source.ToString() : string.Empty) 
    .Matches("^[IM]?$") 
관련 문제