src/DotNetCommon.Core/Accessors/GenericAccessor.cs
(开头部分) 7KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
namespace DotNetCommon.Accessors
{
using System;
using System.Collections;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
/// <summary>
/// 快速访问给定类型的对象的属性值, 参照: <seealso cref="Accessor"/>
/// </summary>
/// <typeparam name="TInstance"></typeparam>
public sealed class GenericAccessor<TInstance> : ObjectAccessor where TInstance : class
{
private readonly Hashtable
_genericInstanceGettersCache,
_genericInstanceSettersCache,
_genericPropertiesGettersCache,
_genericPropertiesSettersCache;
private readonly Hashtable
_genericFieldsGettersCache,
_genericFieldsSettersCache;
[DebuggerStepThrough]
internal GenericAccessor(bool ignoreCase, bool includeNonPublic)
: base(typeof(TInstance), ignoreCase, includeNonPublic)
{
//属性
_genericPropertiesGettersCache = new Hashtable(Properties.Count, Comparer);
_genericPropertiesSettersCache = new Hashtable(Properties.Count, Comparer);
_genericInstanceGettersCache = new Hashtable(Properties.Count, Comparer);
_genericInstanceSettersCache = new Hashtable(Properties.Count, Comparer);
foreach (var pair in Properties)
{
var propName = pair.Key;
var prop = pair.Value;
if (prop.CanRead)
{
_genericPropertiesGettersCache[propName] = AccessorBuilder.BuildGetter<TInstance>(prop, IncludesNonPublic);
}
if (prop.CanWrite)
{
_genericPropertiesSettersCache[propName] = AccessorBuilder.BuildSetter<TInstance>(prop, IncludesNonPublic);
}
}
//字段
_genericFieldsGettersCache = new Hashtable(Fields.Count, Comparer);
_genericFieldsSettersCache = new Hashtable(Fields.Count, Comparer);
foreach (var pair in Fields)
{
var fieldName = pair.Key;
var field = pair.Value;
_genericFieldsGettersCache[fieldName] = AccessorBuilder.BuildGetter<TInstance>(field);
后面还有 142 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明
AI 解读
登录后可用,每次 10 积分,解读结果公开显示在下面。
还没有人解读过这个文件。
