문제

VB6로 돌아가서, 나는 널, 숫자의 경우`` '' '' '' '숫자, 숫자 등 0 등의 차이를 신경 쓰지 않고 코드를 코딩 할 수있는 몇 가지 기능을 작성했습니다. 코딩 할 때 특별한 케이스를 추가하는 것보다 생산성을 더 많이 죽이는 것은 없습니다. 관련이없는 오류를 일으킬 수있는 데이터를 다루기위한 코드; 9999/10000 숫자로 사용하는 것이 널이라면 실제로 0으로 취급합니다.

나는 지금 C#에 있고 VB6과 C# 2005의 차이점은 상당히 광범위합니다. .

따라서 문자열, 데이터베이스 필드, 요청 양식/쿼리 스팅 필드, ???를 수락하는 함수를 작성해야합니다. .

또한 반바지, int16, int32, long, 내가 걱정할 수있는 모든 것을 위해 이것을해야합니다.

그런 다음 줄을 위해 이것을 할 것입니다. 그리고 날짜.

이것이 가치있는 추구입니까? 프레임 워크 나 C#에 대신 사용할 수있는 것이 있습니까? 나는 다른 기능을 호출 할 때 데이터를 인라인으로 사용할 수 있고 임시 변수 등을 만들 필요가없는 것을 정말로 원합니다.

도움이 되었습니까?

해결책

전환 기능의 SCAD가 내장되어 있습니다. 그러나 ... 나는 그들 중 누구도 당신이 원하는 것을 정확하게하는 것을 확신하지 못합니다. 일반적으로, .NET 메소드는 유효하지 않은 입력을 통과 할 때주의를 기울이고 예외를 던집니다.

다행히도 유틸리티 메소드를 쉽게 작성하여 숫자 값, 빈 문자열 또는 널 문자열의 문자열 표현을 모든 출력 유형으로 변환 할 수 있습니다.

public static T SafeConvert<T>(string s, T defaultValue)
{
    if ( string.IsNullOrEmpty(s) )
        return defaultValue;
    return (T)Convert.ChangeType(s, typeof(T));
}

사용:

SafeConvert(null, 0.0) == 0.0;
SafeConvert("", 0.0) == 0.0;
SafeConvert("0", 0.0) == 0.0;

이 일반 메소드는 두 번째 인수 유형에서 리턴 유형을 취합니다.이 유형은 전달 된 문자열이 널 또는 비어있을 때 기본값으로 사용됩니다. 통과하다 0 그리고 당신은 얻을 것입니다 In32 뒤. 통과하다 0L, Int64. 등등...

다른 팁

C#에서 대부분의 데이터 유형은 무효가되지 않으며 (숫자, 날짜 등) 문자열 만 무효입니다. DB에서 데이터를 얻는다면 무효, 또는 그 구문이 부족한 버전, int?, double?, dateTime ?, 등.

모든 nullables가 있습니다 방법 이를 통해 실제 값 또는 기본값이 Null 인 경우 기본값을 얻을 수 있습니다. 이를 통해 이러한 기능을 만드는 것을 피하는 데 도움이됩니다.

문자열의 경우 String.isnullorempty (str) 함수가 있습니다.

당신도 할 수 있습니다 확장 방법을 추가하십시오 특별한 기능을 원하지 않는 경우. 코드에서 처리하는 한 확장 방법은 널 값에 적용될 수 있습니다. 예를 들어:

public static string ValueOrDefault(this string str) 
{
     if (String.IsNullOrEmpty(str)) return MY_DEFAULT_VALUE;
     else return str;
}

.NET 라이브러리에는 Convert라는 클래스가 있습니다. 기본 유형과 몇 가지 공통 클래스 (DateTime과 같은 몇 가지 공통 클래스)에서 필요한 모든 것을 변환 할 수있는 기능이 있습니다.

기본적으로 convert.toint32 (val)처럼 작동합니다.

편집 : 모든 단어를 읽는 법을 배워야합니다. NULL에 대한 걱정을 잡지 못했습니다 ... 이것에 대한 연산자가 있습니다. 당신은 그것을 사용할 수 있습니까 ?? 널 확인하고 기본값을 제공하여 작동 할 수 있습니다.

당신은 또한 LINQ를 살펴보고 싶을 수도 있습니다. 그것은 당신을 위해 많은 종류의 매핑을 처리합니다.

@shog9와 비슷하다고 생각합니다. 사용자 특이한 입력을 처리하기 위해 시도 캐치를 추가합니다. 입력을 변환하려는 유형을 보내고 입력을 객체로 가져옵니다.

public static class SafeConverter
{
   public static T SafeConvert<T>(object input, T defaultValue)
   {
       if (input == null)
          return defaultValue; //default(T);

       T result;
       try
       {
           result = (T)Convert.ChangeType(input.ToString(), typeof(T));
       }
       catch
       {
          result = defaultValue; //default(T);
       }
       return result;
   }
} 

이제 아래처럼 전화하십시오

SafeConverter.SafeConvert<ushort>(null, 0);
SafeConverter.SafeConvert<ushort>("", 0);
SafeConverter.SafeConvert<ushort>("null", 0);
SafeConverter.SafeConvert<ushort>("-1", 0);
SafeConverter.SafeConvert<ushort>("6", 0);
SafeConverter.SafeConvert<ushort>(-1, 0);
SafeConverter.SafeConvert<ushort>(0, 0);
SafeConverter.SafeConvert<ushort>(1, 0);
SafeConverter.SafeConvert<ushort>(9, 0);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top