GetHashCode() public method

public GetHashCode ( ) : int
return int
 private void EmitGetHashCode(PropertyAndField[] properties, MethodBuilder method)
 {
     MethodInfo methodInfo = ObjectType.GetMethod("GetHashCode", Type.EmptyTypes);
     ILGenerator iLGenerator = method.GetILGenerator();
     iLGenerator.Emit(OpCodes.Ldc_I4, method.GetHashCode());
     int index = 0;
     if (0 < properties.Length)
     {
         do
         {
             PropertyAndField field = properties[index];
             FieldBuilder builder = field.Field;
             if (!field.Property.CanWrite)
             {
                 iLGenerator.Emit(OpCodes.Ldc_I4, 0x1f);
                 iLGenerator.Emit(OpCodes.Mul);
                 Label label = iLGenerator.DefineLabel();
                 iLGenerator.Emit(OpCodes.Ldarg_0);
                 iLGenerator.Emit(OpCodes.Ldfld, builder);
                 iLGenerator.Emit(OpCodes.Box, builder.FieldType);
                 iLGenerator.Emit(OpCodes.Brfalse_S, label);
                 iLGenerator.Emit(OpCodes.Ldarg_0);
                 iLGenerator.Emit(OpCodes.Ldflda, builder);
                 iLGenerator.Emit(OpCodes.Constrained, builder.FieldType);
                 iLGenerator.EmitCall(OpCodes.Callvirt, methodInfo, null);
                 iLGenerator.Emit(OpCodes.Add);
                 iLGenerator.MarkLabel(label);
             }
             index++;
         }
         while (index < properties.Length);
     }
     iLGenerator.Emit(OpCodes.Ret);
 }