홈>
확장 함수를 만들었습니다.이 함수는 문자열을 입력으로 사용하고 값을 확인하고 일반 유형을 기반으로 대상 유형으로 캐스팅하여 반환합니다.
이제 문제는 입력 값을 빈 값으로 전달하면 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
- 답변 # 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); } }
관련 자료
- Swift에서 일반 확장을 어떻게 만들 수 있습니까?
- typescript - 가변 길이 일반 배열 튜플을 반환하는 함수
- swift - 측정에 확장을 구현할 때 UnitType에 Generic을 사용할 수 있습니까?
- typescript - 일반에서 작동하지 않는 유형 확장 누산기
- gcc - 함수에서 제네릭 람다 식을 반환하면 명시 적 반환 형식이 지정된 경우 컴파일러 경고가 발생합니다
- android - Generic type을 반환 할 때 * 유형 변수 T를 추론 할 정보가 충분하지 않은 오류가 발생합니다
- typescript - 일반 매개 변수를 기반으로 함수 서명 리턴
- Kotlin에서 강력한 형식의 일반 확장 함수를 작성하는 방법은 무엇입니까?
- pandas - 데이터 프레임의 열 비교 및 차이 반환
- c# - 다른 인터페이스 유형과 추상 클래스를 리턴하는 일반 팩토리를 작성하는 방법
- ios - 자체 주조 기능이있는 신속한 일반 확장
- 일반 뷰 바인딩을위한 Android Kotling 확장
- 일반 Java 클래스의 확장이 수퍼 생성자를 인식하지 못합니다
관련 질문
- c# : Gridview.Databind()가 데이터를 새로 고치지 않습니다.
- C# ASP .NET Entity Framework는 여러 중첩 테이블에서 선택
- Android Date to C# long DateTime-Ticks
- c# : 깊은 json 자식의 데이터 필터링
- c# : Excel에서 검색할 수 있는 asp.net API를 통해 QR 이미지 제공
- 이 C# 클래스가 제네릭에서 사용되는 자식 대신 부모 메서드를 호출하는 이유는 무엇입니까?
- c# : 날짜 형식이 dd-MM-yyyy인 시스템의 ValueToCompare="MM/dd/yyyy"에 대해 CompareValidator가 제대로 작동하지 않습니다.
- c# : Web API에서 진행 상황 반환
- C#의 comboBox에 목록 바인딩
- c# : ASP.NET의 DropDownList에서 선택됨을 True로 설정하는 방법
그럼 그냥
default
를 반환 가치