Viyi.Util/Extensions/Convert/ObjectExtensions.cs

(完整代码) 2KB

using System.Diagnostics.CodeAnalysis;

namespace Viyi.Util.Extensions.Convert;

/// <summary>
/// 包含一系列对<c>object</c>进行扩展的方法的类。
/// </summary>
public static partial class ObjectExtensions {
    /// <summary>
    /// 将object对象当作指定数据类型进行处理。
    /// </summary>
    /// <typeparam name="T">目标类型</typeparam>
    /// <param name="object">源数据</param>
    /// <param name="defaultValue">缺省值</param>
    /// <returns>返回转换引用类型之后的值,如果不能转换为指定引用类型,
    /// 返回<c>defaultValue</c></returns>
    /// <remarks>与as关键字的区别在于,<c>As</c>方法可以处理结构。</remarks>
    [return: NotNullIfNotNull(nameof(defaultValue))]
    public static T? As<T>(this object @object, T? defaultValue) where T : class {
        try { return (T?) @object ?? defaultValue; }
        catch { return defaultValue; }
    }

    /// <summary>
    /// 将object对象当作指定数据类型进行处理。
    /// </summary>
    /// <typeparam name="T">目标类型</typeparam>
    /// <param name="object">源数据</param>
    /// <returns>返回转换引用类型之后的值,如果不能转换为指定引用类型,
    /// 返回<c>default(T)</c></returns>
    /// <remarks>与as关键字的区别在于,<c>As</c>方法可以处理结构。</remarks>
    public static T? As<T>(this object @object) where T : class {
        return @object.As(default(T));
    }

    /// <summary>
    /// 将object对象转换为指定数据类型。
    /// </summary>
    /// <typeparam name="T">目标类型</typeparam>
    /// <param name="object">源数据</param>
    /// <param name="defaultValue">缺省值</param>
    /// <returns>通过<c>System.Convert</c>将源数据转换为指定类型的数据,
    /// 如果转换不成功,或转换结果为 null,返回<c>defaultValue</c></returns>
    [return: NotNullIfNotNull(nameof(defaultValue))]
    public static T? ConvertTo<T>(object @object, T? defaultValue) where T : class {
        try { return (T?) System.Convert.ChangeType(@object, typeof(T)) ?? defaultValue; }
        catch { return defaultValue; }
    }

    /// <summary>
    /// 将object对象转换为指定数据类型。
    /// </summary>
    /// <typeparam name="T">目标类型</typeparam>
    /// <param name="object">源数据</param>
    /// <returns>通过<c>System.Convert</c>将源数据转换为指定类型的数据,
    /// 如果转换不成功,返回<c>default(T)</c></returns>
    public static T? ConvertTo<T>(object @object) where T : class {
        return ConvertTo<T>(@object, default(T));
    }
}

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。