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<Person>();
/// //输出: "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 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
