/// <summary> /// Emits appropriate storing member instructions. /// </summary> /// <param name="il">IL generator to be emitted to.</param> /// <param name="member"><see cref="MemberInfo"/> to be stored.</param> public static void EmitStoreValue( TracingILGenerator il, MemberInfo member ) { Contract.Requires( il != null ); Contract.Requires( member != null ); var asProperty = member as PropertyInfo; if ( asProperty != null ) { if ( !asProperty.CanWrite ) { throw new SerializationException( String.Format( CultureInfo.CurrentCulture, "Cannot set value to '{0}.{1}' property.", asProperty.DeclaringType, asProperty.Name ) ); } il.EmitSetProperty( asProperty ); } else { Contract.Assert( member is FieldInfo, member.ToString() + ":" + member.MemberType ); var asField = member as FieldInfo; if ( asField.IsInitOnly ) { throw new SerializationException( String.Format( CultureInfo.CurrentCulture, "Cannot set value to '{0}.{1}' field.", asField.DeclaringType, asField.Name ) ); } il.EmitStfld( asField ); } }