Viyi.Util.Build/Builder/ObjectToValuesBuilder.cs

(完整代码) 1KB

namespace Viyi.Util.Build.Builder;

internal class ObjectToValuesBuilder : Builder {
    static readonly (string, string)[] Defines = new[] {
        ("byte", "ToByte"),
        ("sbyte", "ToSByte"),
        ("short", "ToInt16"),
        ("ushort", "ToUInt16"),
        ("int", "ToInt32"),
        ("uint", "ToUInt32"),
        ("long", "ToInt64"),
        ("ulong", "ToUInt64"),
        ("decimal", "ToDecimal"),
        ("double", "ToDouble"),
        ("float", "ToSingle"),
        ("bool", "ToBoolean"),
        ("char", "ToChar"),
    };

    public ObjectToValuesBuilder()
        : base(@"Extensions\Convert\ObjectExtensions.ToValue.gen.cs") { }

    protected override void WriteHeader() {
        base.WriteHeader();
        WriteLine(@"
namespace Viyi.Util.Extensions.Convert;

partial class ObjectExtensions {");
    }

    protected override void WriteFooter() {
        WriteLine("}");
        WriteLine();
        base.WriteFooter();
    }

    protected override void WriteContent() {
        foreach (var (typeName, methodName) in Defines) {
            WriteLine(@$"
    /// <summary>
    /// 将object对象转换为{typeName}类型的数据。
    /// </summary>
    /// <param name=""object"">源数据</param>
    /// <param name=""defaultValue"">缺省值</param>
    /// <returns>转换结果数据,如果转换不成功,返回<c>defaultValue</c></returns>
    /// <remarks>与<c>ConvertTo</c>相比,明确指定类型的转换效率更高。</remarks>
    public static {typeName} {methodName}(object @object, {typeName} defaultValue = default) {{
        try {{ return System.Convert.{methodName}(@object); }}
        catch {{ return defaultValue; }}
    }}");
        }
    }
}

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

AI 解读

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

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