>

확장 함수를 만들었습니다.이 함수는 문자열을 입력으로 사용하고 값을 확인하고 일반 유형을 기반으로 대상 유형으로 캐스팅하여 반환합니다.

이제 문제는 입력 값을 빈 값으로 전달하면 nullable 유형의 경우 null을 반환해야하지만 예외가 발생한다는 것입니다.

예 : 날짜/시간으로 캐스트하려는 경우 아래 예외가 발생합니다.

String was not recognized as a valid DateTime

아래는 제 코드입니다 :

public static class Extension
    {
        public static T ToNull<T>(this string value)
        {
            var stringType = "System.Nullable`1[[System.{0}, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]";
            if (typeof(T) == typeof(String))
                stringType = string.Format(stringType, "String");
            if (typeof(T) == typeof(Int32?) || typeof(T) == typeof(Int32))
                stringType = string.Format(stringType, "Int32");
            if (typeof(T) == typeof(DateTime?) || typeof(T) == typeof(DateTime))
                stringType = string.Format(stringType, "DateTime");
            if (typeof(T) == typeof(Int64?) || typeof(T) == typeof(Int64))
                stringType = string.Format(stringType, "Int64");

            Type originalType = Type.GetType(stringType);
            var underlyingType = Nullable.GetUnderlyingType(originalType);
            return (T)Convert.ChangeType(value, underlyingType ?? originalType);
        }
    }

여기에 내가 어떻게 접근하고 있는지 :

string s = "";
DateTime? t = s.ToNull<DateTime?>();
Console.WriteLine(t);

위의 경우 null을 반환하고 싶습니다.

  • 답변 # 1

    그럼 그냥 default 를 반환  가치

    //Check for empty or null first
    if(string.IsNullOrEmpty(value)) return default(T);
    //Then your code
    var stringType = "System.Nullable`1[[System.{0}, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]";
    ...
    
    

  • 답변 # 2

    @mjwills가 별도의 메소드를 작성하는 것에 대한 답변에 응답하기 위해 단일 메소드를 유지하고 동적으로 던지는 모든 유형을 처리하는 솔루션을 찾았습니다.

    public static class Extension
    {
        public static T ToNull<T>(this string value)
        {
            if (String.IsNullOrEmpty(value)) return default(T);
            Type originalType = typeof(T);
            var underlyingType = Nullable.GetUnderlyingType(originalType);
            return (T)Convert.ChangeType(value, underlyingType ?? originalType);
        }
    }
    
    

  • 이전 javascript - 각도 6 - 외부화 url
  • 다음 swift - AWS Lambda 함수에서 JSON 응답 파싱