예제 #1
0
        public static int OffsetOf(FieldInfo fieldInfo)
        {
            if (fieldInfo is null)
            {
                throw new ArgumentNullException(nameof(fieldInfo));
            }

            if (fieldInfo.IsLiteral)
            {
                throw new ArgumentException("Unable get offset of a const field.", nameof(fieldInfo));
            }

            if (VersionDifferences.UseInternalMethod && OffsetHelper.OffsetOfByFieldDescIsAvailable)
            {
                return(OffsetHelper.GetOffsetByFieldDesc(fieldInfo));
            }

            if (!fieldInfo.IsStatic && OffsetHelper.GetOffsetByIndexOfInstance(fieldInfo) is int offset && offset >= 0)
            {
                return(offset);
            }

            if (VersionDifferences.IsSupportEmit)
            {
                return(OffsetHelper.GetOffsetByEmit(fieldInfo));
            }

            throw new PlatformNotSupportedException();
        }
예제 #2
0
        public static int OffsetOf(FieldInfo fieldInfo)
        {
            if (fieldInfo == null)
            {
                throw new ArgumentNullException(nameof(fieldInfo));
            }

            if (fieldInfo.IsLiteral)
            {
                throw new ArgumentException("Unable get offset of a const field.", nameof(fieldInfo));
            }

            if (OffsetHelper.OffsetOfByHandleIsAvailable)
            {
                return(OffsetHelper.OffsetOfByHandle(fieldInfo));
            }

            return(OffsetHelper.GetOffsetByDynamic(fieldInfo));
        }