2013-04-23 2 views
0

양식을 처리하기 전에 각각 Trim이어야합니다. 많은 입력이있는 양식이 있습니다. 값 비싼 값을 사용할 때마다이 값을 조정하는 것은 힘들고 강력하지는 않습니다. 각 값은 폼의 코드 숨김 내 여러 위치에서 사용됩니다.양식 입력에서 공백을 자동으로 자르기

내 각 속성이 같은 일을 생각 해요 :

private string _surname 
public string Surname 
{ 
    get 
    { 
     return _surname.Trim(); 
    } 
    set 
    { 
     _surname = value; 
    } 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 
    Surname = txtSurname.Text; 
} 

심지어이 그래도 꽤 자세한 보인다. 특히 입력 수가 훨씬 더 많은 양식의 경우. 아마도 단순히 : 나는 다른 곳에서 같은 속성에 할당하는 경우

private string _txtSurname; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    _txtSurname = txtSurname.Text.Trim(); 
} 

는하지만이 점에서 첫 번째 예와 같은 견고 함이없는, 내가 먼저 손질해야한다는 것을 잊지 수 있습니다. 이것을 처리하는 훨씬 더 간결한 방법이 있어야하는 것처럼 느껴집니다. 거기 있니?

+0

대신 사용, 기본 값을 손질하기 위해 Text 속성을 재정의 내 거친 코드. –

답변

6

업데이트 : : 확장 메서드 접근법, 가독성 관점에서는 기능적이지 않습니다. 직관적으로 foo.NullSafeTrim();으로 전화하십시오. foo = nullNullReferenceException입니다. 그러나 구현 방식에 따라 그렇지 않습니다. Meh.

나는 모든 게터와 세터에 .Trim()을 추가하는 것이 힘들 것이라고 동의합니다. 특히 NullReferenceException을 피하기 위해 모든 null 검사를 처리해야하는 경우. 코드를 조금 더 작게 만들 수있는 또 다른 옵션은 Extension Methods을 사용하는 것입니다.예를 들어 :

public static class MyExtensions 
{ 
    public static string NullSafeTrim(this string value) 
    { 
     if (value != null) 
     { 
      value = value.Trim(); 
     } 

     return value; 
    } 
} 

그런 다음 다음과 같은 패턴을 사용할 수 있습니다

private string _surname; 
public string Surname 
{ 
    get { return _surname.NullSafeTrim(); } 
    set { _surname = value.NullSafeTrim(); } 
} 

당신이 SO에 검색을 높일 수있을 것입니다 확장 방법을 사용하여 몇 가지 고려 사항이 있습니다.

또는 값을 처리하는 클래스에서 트리밍 및 널 검사를 모두 수행 할 수 있습니다. 이 새로운 프로젝트 나 내가 TextBox에서 파생되는 새로운 Control을 만들 것입니다 코드를 수정할 수 있다면

+0

이 프로젝트에서 .NET v2.0에 붙어 있다고 언급 했어야합니다. 그러나이 아이디어가 마음에 들었으므로 정적 유틸리티 클래스와 비슷한 것을 할 것입니다. 모든 공용 속성에 대해 'NullSafeTrim' 호출을 복제 할 필요가 없도록 접근 자 논리를 한 곳에서 정리하는 방법을 알고 있습니까? –

+0

그런 다음 정적 유틸리티 클래스를 사용할 것입니다. 솔직히, 나는 그 클래스를 사용하여 프로세서로 보내기 직전에 값을 자르거나 프로세싱의 첫 번째 단계로 값을 트림합니다. 모든 단일 get/set 트리밍 귀찮게하지 않을 것입니다. –

+0

건배, 내가 사유 재산으로 할 일이 생기면 모든 것을 다듬을 거라고 생각해. –

1

빈 입력이 작동하지 않으며 설정이 실제로 뒷받침 필드에 설정되지 않았습니다!

private string _txtSurname 
{ 
    get; // problematic! 
    set { return value.Trim();} 
} 

아래에보십시오 :

페이지로드에서
public string TxtSurname 
{ 
    get { return _txtSurname;} 
    set { _txtSurname=value.Trim();} 
} 

는 민간 멤버에서 작동하지 않는 속성을 사용하는 대신 내가 제공하고자

protected void Page_Load(object sender, EventArgs e) 
{ 
    TxtSurname = SomeText.Trim(); 
} 
+1

'NullReferenceException'이 기다리고 있습니다. – Romoku

+0

이 예외는 어떤 행에서 발생합니까? TxtSurname이 null 인 경우 속성을 null로 반환하는 것이 합법적인지 확인해야합니다. 기본적인 C# 책을 살펴보십시오. – David

+1

'set {_txtSurname = value.Trim();}''Trim''이 null을 던집니다. – Romoku

0

양식 입력을위한 두 가지 속성.

public class FormInput 
{ 
    public string Surname { get; set; } 
    public string ValidatedSurname 
    { 
     get 
     { 
      return string.IsNullOrWhiteSpace(Surname) 
        ? string.Empty 
        : Surname.Trim(); 
     } 
    } 
} 
0

개인 변수를 만들고 양식의 속성을 모두 작성하지 않는 이유는 무엇입니까? 그런 다음 속성에 대한 get 및 set에 trim() 기능을 제공하고 속성을 사용하여 필드를 직접 사용하는 대신 양식 값을 읽고 할당 할 수 있습니다.

private string _txtSurname; 

public string TxtSurname 
{ 
    get 
    { 
     return string.IsNullOrWhiteSpace(_txtSurname) ? string.Empty : _txtSurname.Trim(); 
    } 
    set 
    { 
     _txtSurname = value.Trim(); 
    } 
} 

그런 식으로 설정하거나 다음 자신의 클래스로 양식 속성을 이동 필드 값이 비공개 경우 다른 곳

protected void Page_Load(object sender, EventArgs e) 
{ 
    this.TxtSurname = txtSurname.Text(); 
} 

손질 것에 대해 걱정할 필요없이 값을 얻는 경우 속성을 공개하면 (예 :보기 모델을 사용할 위치를 개발할 때와 같이) 필드 값에 직접 할당 할 수없고 트림되지 않은 값을 가질 위험이 없습니다. 물론이 작업을 수행하는 경우 트리밍 작업 만 수행하면됩니다.

+0

이 방법을 사용하면 NullReferenceException이 발생합니다. 특히 _txtSurname이 null 인 경우 getter의 .txtSurname에 .Trim()을 호출하고 value가 null 인 경우 setter의 값에 .Trim()을 호출합니다. –

+0

true 수정 된 솔루션 –

1

후 개정 표준 하나