내 응용 프로그램에는 관리자가 특정 사용자에 대한 할인율을 설정할 수있는 텍스트 상자 (txtDiscount
)가 있거나 그렇지 않을 수도 있습니다. 그래서 invalid argument
에 대한 오류와 분명히 내가 거 TryParse
에서 사용 해요 경우 널 (NULL)이 될 수없는 discount
의double.TryParse를 사용하는 방법 출력이 null 일 때 허용됩니까?
double? discount = null;
if (!string.IsNullOrEmpty(txtDiscount.Text))
{
if (!double.TryParse(txtDiscount.Text, out discount)) errors.Add("Discount must be a double.");
}
: 백 엔드에 나는 지금 내가이 그래서 데이터를 저장할 . 나는 많은 사람들이 이러한 유형의 상황에 대한 확장을하고있는 것을 보았으나 지금은 필요하다고 생각하지 않습니다. 내가 생각할 수있는 것은과 같이 다른 변수를 사용하는 것입니다 :
double? discount = null;
private double _discount;
if (!string.IsNullOrEmpty(txtDiscount.Text))
{
if (!double.TryParse(txtDiscount.Text, out _discount))
{
errors.Add("Discount must be adouble.");
}
else
{
discount = _discount;
}
}
한 다음 데이터베이스에 값을 전달 내 널 (NULL) discount
를 사용합니다. 하지만 실제로는 위의 코드가 마음에 들지 않습니다. 그런 일은 꽤 복잡해 보이지만 더 나은 것을 생각할 수는 없습니다. 그렇다면 확장 방법을 사용하지 않고이 상황을 어떻게 처리 할 수 있습니까?
double? discount = null;
if (!String.IsNullOrEmpty(txtDiscount.Text))
{
double value;
if (Double.TryParse(txtDiscount.Text, out value))
discount = value;
else
errors.Add("Discount must be a double."); // discount will have null value
}
을하지만 확장에 모든 논리를 이동했던 : 단지 TryParse 메소드에 건네 지역이 아닌 널 (NULL) 값을 사용 -
가 왜 특별한 경우를 처리하여 응용 프로그램의 설계를 복잡하게 않습니다
개인적으로, 난 그냥 더블 Null 허용하는 구문 분석 확장자 가고 싶어? 왜 시스템은 항상 할인 가치 (0.0)를 가정하고 누군가가 이것을 바꿀 때만 새로운 숫자를 얻습니다. 모든 계산에 항상 할인이 포함될 때 (0.0 인 경우에도) 특수 사례 처리가 필요하지 않습니다. GUI의 경우 빈 문자열 검사가 필요하지만 실수를하지 않고 프론트 엔드에서 데이터베이스 디자인을 반영하지 마십시오. – Samuel
글쎄,이 경우에는'0.0'은 여전히 값이기 때문에 nullable이 괜찮다고 생각합니다. 사용자가 0.0 %의 할인을 받았다고 말할 수 있습니다. null 허용은이 사용자가 실제로 나를 위해 할인을하지 않는다고 말합니다 더 의미. 그러나 제 질문이 좀 더 일반적 일지라도, 형식을 'dobule'로 변경하더라도이 경우를 다루는 방법을 여전히보고 싶습니다. 꽤 표준적인 것으로 보입니다. – Leron
@ Leron 할인이 마이너스 일 경우 어떻게해야합니까? –