첨부 소스 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

▶ Convert 클래스 : ChangeType 정적 메소드를 사용해 지정 타입으로 변환하기 예제

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 정적 메소드를 사용해 지정 타입으로 변환하기

#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
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요