2009-12-14 2 views
1

내 개체에는 종종 SQL 명령 매개 변수로 사용되는 nullable types 속성이 있습니다.Nullable 형식을 Nullable로부터 더 잘 초기화하는 방법은 무엇입니까?

public int? Amount 
{ 
    get 
    { 
     int i; 
     int? amount = null; 
     if (Int32.TryParse(Request["amount"], out i)) 
     { 
      amount = i; 
     } 
     return amount; 
    } 
} 

command.Parameters.Add("@amount").Value = (object)this.Amount ?? DbNull.Value; 

가 어떻게를이 짧은 또는 빠르게 만들기 위해 같은 초기화 코드를 다시 작성할 수 있습니다 : 나는 그들에게 다음의 방법을 초기화

?

답변

0

나는 조금 Randolpho의의 재 작성 및 마크의 코드를 좋아

Public MaybeValid<int> Amount 
{ 
    Amount.Value = Int32.TryParse(out Amount.IsValid); 
} 

Int32을 사용하면 여분의 typecasting 노력 probab 별로 문제는 아니지만 큰 유형의 경우 더 중요 할 수 있습니다.

3

1) 짧을수록 빠릅니다. 중요 사항.

2)이 마찬가지로 잘 작동합니다 : 첫째

public int? Amount 
{ 
    get 
    { 
     int i; 
     if (Int32.TryParse(Request["amount"], out i)) 
     { 
      return i; 
     } 
     return null; 
    } 
} 
6

는 그렇게하지 않는다; 당신은 조용히 당신이 데이터를 파싱 할 수 없다는 사실을 포기합니다! 이 경우 예외를 던지거나 예치 시나리오 (예 : null)를 처리하는 것이 좋습니다.

string val = Request["amount"]; 
return string.IsNullOrEmpty(val) ? (int?)null : (int?)int.Parse(val); 
-5
public int? Amount 
{ 
    get 
    { 
     try 
     { 
       return Int.Parse(Request["amount"]); 
     } 
      catch (exception e) 
     { 
       return null; 
     } 
    } 
{ 

성능은 정말 변경하려고 할 것이 아니라, 당신이 정말로 최적화하려면 값이 유효한의 int 거의 항상있는 경우에, 당신은 나의 접근 방식은, 가장 일반적인 무엇인지 생각해야 가능성이 가장 높습니다. 그렇지 않다면 접근 방법이 가장 좋습니다.

struct MaybeValid<T> 
{ 
    public bool IsValid; 
    public T Value; 
} 

수 있도록 할 것을 :

는 발신자가 Nullable<T>을 요구
return Int32.TryParse(Request["amount"], out i)) ? (int?)i : (int?)null; 
+0

예외를 포착하지 마십시오. 발생했을 수있는 다른 종류의 예외를 암묵적으로 가려줍니다. –

+4

!! 'TryParse()'는 이런 종류의 코드 작성을 막기 위해 추가되었으며 TryParse를 사용하면 모든 예외 사항을 삼키는 것보다 훨씬 낫습니다! –

+1

http://stackoverflow.com/questions/150114/parsing-performance-if-tryparse-try-catch이 게시물은 내가 틀렸다고 말합니다. 실패가없는 경우에도 마찬가지입니다. –

0

하지 않는 한, 내가 좋아하는 타입을 사용하는 것이 좋습니다 것 :

관련 문제