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); } }