■ Convert 클래스의 ChangeType 정적 메소드를 사용해 지정 타입으로 변환하는 방법을 보여준다.
▶ Convert 클래스 : ChangeType 정적 메소드를 사용해 지정 타입으로 변환하기 예제 (C#)
1 2 3 4 5 6 7 8 9 10 11 |
if(ChangeType<int>("10", out int value1)) { Console.WriteLine(value1); } if(ChangeType<int?>("20", out int? value2)) { Console.WriteLine(value2 == null ? "NULL" : value2.ToString()); } |
▶ Convert 클래스 : ChangeType 정적 메소드를 사용해 지정 타입으로 변환하기 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
#region 타입 변경하기 - ChangeType<TTarget>(sourceValue, targetValue) /// <summary> /// 타입 변경하기 /// </summary> /// <typeparam name="TTarget">타겟 타입</typeparam> /// <param name="sourceValue">소스 값</param> /// <param name="targetValue">타겟 값</param> /// <returns>처리 결과</returns> public bool ChangeType<TTarget>(object sourceValue, out TTarget targetValue) { Type targetType = typeof(TTarget); if(IsNullableType(targetType) && (sourceValue == null || sourceValue == DBNull.Value)) { targetValue = default(TTarget); return true; } Type underlyingType = Nullable.GetUnderlyingType(targetType) ?? targetType; try { if(underlyingType == typeof(Guid)) { if(sourceValue is string) { sourceValue = new Guid(sourceValue as string); } if(sourceValue is byte[]) { sourceValue = new Guid(sourceValue as byte[]); } targetValue = (TTarget)Convert.ChangeType(sourceValue, underlyingType); return true; } targetValue = (TTarget)Convert.ChangeType(sourceValue, underlyingType); return true; } catch(Exception) { targetValue = default(TTarget); return false; } } #endregion #region Nullable 타입 여부 구하기 - IsNullableType(sourceType) /// <summary> /// Nullable 타입 여부 구하기 /// </summary> /// <param name="sourceType">소스 타입</param> /// <returns>Nullable 타입 여부</returns> private bool IsNullableType(Type sourceType) { return sourceType.IsGenericType && sourceType.GetGenericTypeDefinition() == typeof(Nullable<>); } #endregion |