src/DotNetCommon.Core/Extensions/GenericExtensions.cs

(开头部分) 4KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

namespace DotNetCommon.Extensions
{
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Diagnostics;
    using System.Dynamic;
    using System.Linq;
    using System.Reflection;
    using System.Reflection.Emit;
    using System.Runtime.Serialization;
    using System.Threading;
    using System.Threading.Tasks;

    /// <summary>
    /// 通用扩展方法
    /// </summary>
    public static class GenericExtensions
    {
        /// <summary>
        /// 将当前对象转成字典(属性名->属性值)
        /// </summary>
        /// <param name="object">原对象</param>
        /// <param name="includePrivate">是否包含私有属性,即: private string name { set; get; }</param>
        /// <param name="inherit">是否包含继承的属性</param>
        public static Dictionary<string, object> ToDictionary<T>(this T @object, bool inherit = true, bool includePrivate = false)
        {
            var dic = new Dictionary<string, object>();
            if (@object == null) return dic;
            foreach (var property in @object.GetType().GetInstanceProperties(inherit, includePrivate))
            {
                dic.Add(property.Name, property.GetValue(@object, null));
            }
            return dic;
        }

        /// <summary>
        /// 判断当前对象是否所属<seealso cref="Type"/>的默认值(<c>null</c>被认为是默认值)
        /// </summary>
        public static bool IsDefault<T>(this T @object) => EqualityComparer<T>.Default.Equals(@object, default);

        /// <summary>
        /// 返回一个未初始化的实例,注意: 未执行任何的初始化逻辑,比如 构造函数/字段初始化等,由于返回的对象不在一个正常的状态,请慎用。
        /// </summary>
        /// <remarks>参照:<see href="https://msdn.microsoft.com/en-us/library/system.runtime.serialization.formatterservices.getuninitializedobject.aspx"/></remarks>
        /// <example>
        /// <code>
        /// class Person { public Person(int Id) { this.Id = Id; } public int Id { get; set; } = 5; public string Name { get; set; } = "小明"; }
        /// var person = ExpressionExtensions.GetUninitializedInstance&lt;Person&gt;();
        /// //输出: "0,null"
        /// Console.WriteLine($"{person.Id},{person.Name ?? "null"}");
        /// </code>
        /// </example>
        public static T GetUninitializedInstance<T>() => (T)FormatterServices.GetUninitializedObject(typeof(T));

        /// <summary>
        /// 获取符合条件的属性名集合
        /// </summary>
        /// <param name="object"></param>
        /// <param name="includePrivate">是否包含私有属性</param>
后面还有 66 行代码,解锁后查看完整代码

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

AI 解读

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

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