C #에서 문자열을 nullable int로 구문 분석하고 싶습니다. 즉. 문자열의 int 값을 반환하거나 구문 분석 할 수없는 경우 null을 반환하고 싶습니다.
나는 이것이 효과가 있기를 바랐다.
int? val = stringVal as int?;
그러나 그것은 작동하지 않으므로 지금하는 방법은이 확장 방법을 작성하는 것입니다
public static int? ParseNullableInt(this string value)
{
if (value == null || value.Trim() == string.Empty)
{
return null;
}
else
{
try
{
return int.Parse(value);
}
catch
{
return null;
}
}
}
더 좋은 방법이 있습니까?
편집 : TryParse 제안에 감사드립니다. 나는 그것에 대해 알고 있었지만 거의 동일하게 작동했습니다. nullable int로 직접 구문 분석 할 기본 제공 프레임 워크 방법이 있는지 알고 싶습니다.
답변
int.TryParse
아마 좀 더 쉬울 것입니다 :
public static int? ToNullableInt(this string s)
{
int i;
if (int.TryParse(s, out i)) return i;
return null;
}
편집 @Glenn int.TryParse
은 “프레임 워크에 내장되어 있습니다”. 그것은하고 int.Parse
있습니다 의 int로 문자열을 구문 분석하는 방법.
답변
조건부 연산자와 null
널 입력 가능 유형으로 캐스트 할 수 있다는 사실을 사용하여 한 행으로이를 수행 할 수 있습니다 (기존 int가없는 경우 두 행 TryParse
) 의 출력에 재사용 할 수 있습니다 .
사전 C # 7 :
int tempVal;
int? val = Int32.TryParse(stringVal, out tempVal) ? Int32.Parse(stringVal) : (int?)null;
메소드 호출에서 출력 변수를 선언 할 수있는 C # 7의 업데이트 된 구문을 사용하면 훨씬 간단 해집니다.
int? val = Int32.TryParse(stringVal, out var tempVal) ? tempVal : (int?)null;
답변
[ @sblom의 제안에 따라 최신 C #을 사용하도록 업데이트 됨 ]
나는이 문제가 있었고 결국 이것으로 끝났다 (결국 a if
와 2 return
는 너무 오래 감았 다!).
int? ToNullableInt (string val)
=> int.TryParse (val, out var i) ? (int?) i : null;
더 심각한 int
것은 C # 키워드 인 Int32
. .NET Framework BCL 유형 인 을 혼합하지 마십시오. 작동하지만 코드가 지저분 해 보입니다.
답변
Glenn Slaven : nullable int로 직접 구문 분석하는 내장 프레임 워크 방법이 있는지 알고 싶습니다.
값이 null 또는 빈 문자열처럼 유효하지만 유효하지 않은 값에 대한 예외를 throw하므로 예외를 잡아서 기본값을 반환 해야하는 경우이 방법은 null이 가능한 int (및 int가 아닌)로 직접 구문 분석됩니다 그러한 상황에서 :
public static T Parse<T>(object value)
{
try { return (T)System.ComponentModel.TypeDescriptor.GetConverter(typeof(T)).ConvertFrom(value.ToString()); }
catch { return default(T); }
}
이 접근 방식은 널 입력 가능 구문 분석 및 널 입력 가능에 여전히 사용할 수 있습니다.
enum Fruit { Orange, Apple }
var res1 = Parse<Fruit>("Apple");
var res2 = Parse<Fruit?>("Banana");
var res3 = Parse<int?>("100") ?? 5; //use this for non-zero default
var res4 = Parse<Unit>("45%");
주의 : 변환기에는 예외를 캡처하는 대신 사용할 수있는 IsValid 메서드가 있습니다 (예외가 발생 하면 예상 한 경우 불필요한 오버 헤드 가 발생 함 ). 불행히도 .NET 4 이후에만 작동하지만 올바른 DateTime 형식의 유효성을 검사 할 때 로케일을 확인하지 못하는 문제가 여전히 있습니다 ( 버그 93559 참조) .
답변
var result = int.TryParse(foo, out var f) ? f : default(int?);
출처 :
- 바르
- Int32.TryParse
- 조건부 연산자
- 기본 연산자 ( 이 stackoverflow 게시물에 설명되어 있음 ).
- 널 입력 가능 값 유형
답변
오래된 주제이지만 어떻습니까?
public static int? ParseToNullableInt(this string value)
{
return String.IsNullOrEmpty(value) ? null : (int.Parse(value) as int?);
}
나는 null을 구문 분석 할 requriement, TryParse 버전이 ToNullableInt32 (XXX)에서 오류를 발생시키지 않는 것이 좋습니다. 원치 않는 자동 오류가 발생할 수 있습니다.
답변
이 시도:
public static int? ParseNullableInt(this string value)
{
int intValue;
if (int.TryParse(value, out intValue))
return intValue;
return null;
}
