Пример #1
0
 public override int GetHashCode()
 {
     return(TypeId.GetHashCode() +
            FieldOffset.GetHashCode() +
            Index.GetHashCode() +
            OwningType.GetHashCode());
 }
        public static int OffsetOf <TStruct, TField>(
            this TStruct @struct, Expression <Func <TStruct, TField> > expression, FieldOffset offset = FieldOffset.Begin)
            where TStruct : struct
        {
            var memberExpression = expression.Body as MemberExpression;

            if (memberExpression == null)
            {
                throw new ArgumentOutOfRangeException(nameof(expression));
            }

            var fieldInfo = memberExpression.Member as FieldInfo;

            if (fieldInfo == null)
            {
                throw new ArgumentOutOfRangeException(nameof(expression));
            }

            var offset1 = Marshal.OffsetOf <TStruct>(fieldInfo.Name);
            var offset2 = offset1.ToInt32();

            switch (offset)
            {
            case FieldOffset.Begin:
                return(offset2);

            case FieldOffset.End:
                return(offset2 + Marshal.SizeOf(fieldInfo.FieldType));

            default:
                throw new ArgumentOutOfRangeException(nameof(offset), offset, null);
            }
        }