Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Core / Microsoft / Scripting / Ast / MemberAssignment.cs / 1305376 / MemberAssignment.cs
/* ****************************************************************************
*
* Copyright (c) Microsoft Corporation.
*
* This source code is subject to terms and conditions of the Microsoft Public License. A
* copy of the license can be found in the License.html file at the root of this distribution. If
* you cannot locate the Microsoft Public License, please send an email to
* dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound
* by the terms of the Microsoft Public License.
*
* You must not remove this notice, or any other, from this software.
*
*
* ***************************************************************************/
using System.Dynamic.Utils;
using System.Reflection;
#if SILVERLIGHT
using System.Core;
#endif
namespace System.Linq.Expressions {
///
/// Represents assignment to a member of an object.
///
public sealed class MemberAssignment : MemberBinding {
Expression _expression;
internal MemberAssignment(MemberInfo member, Expression expression)
#pragma warning disable 618
: base(MemberBindingType.Assignment, member) {
#pragma warning restore 618
_expression = expression;
}
///
/// Gets the which represents the object whose member is being assigned to.
///
public Expression Expression {
get { return _expression; }
}
///
/// Creates a new expression that is like this one, but using the
/// supplied children. If all of the children are the same, it will
/// return this expression.
///
/// The property of the result.
/// This expression if no children changed, or an expression with the updated children.
public MemberAssignment Update(Expression expression) {
if (expression == Expression) {
return this;
}
return Expression.Bind(Member, expression);
}
}
public partial class Expression {
///
/// Creates a binding the specified value to the given member.
///
/// The for the member which is being assigned to.
/// The value to be assigned to .
/// The created .
public static MemberAssignment Bind(MemberInfo member, Expression expression) {
ContractUtils.RequiresNotNull(member, "member");
RequiresCanRead(expression, "expression");
Type memberType;
ValidateSettableFieldOrPropertyMember(member, out memberType);
if (!memberType.IsAssignableFrom(expression.Type)) {
throw Error.ArgumentTypesMustMatch();
}
return new MemberAssignment(member, expression);
}
///
/// Creates a binding the specified value to the given property.
///
/// The for the property which is being assigned to.
/// The value to be assigned to .
/// The created .
public static MemberAssignment Bind(MethodInfo propertyAccessor, Expression expression) {
ContractUtils.RequiresNotNull(propertyAccessor, "propertyAccessor");
ContractUtils.RequiresNotNull(expression, "expression");
ValidateMethodInfo(propertyAccessor);
return Bind(GetProperty(propertyAccessor), expression);
}
private static void ValidateSettableFieldOrPropertyMember(MemberInfo member, out Type memberType) {
FieldInfo fi = member as FieldInfo;
if (fi == null) {
PropertyInfo pi = member as PropertyInfo;
if (pi == null) {
throw Error.ArgumentMustBeFieldInfoOrPropertInfo();
}
if (!pi.CanWrite) {
throw Error.PropertyDoesNotHaveSetter(pi);
}
memberType = pi.PropertyType;
} else {
memberType = fi.FieldType;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- KoreanLunisolarCalendar.cs
- Quaternion.cs
- IntegerValidatorAttribute.cs
- ChannelManager.cs
- StatusBar.cs
- InvokeMethodDesigner.xaml.cs
- EncryptedXml.cs
- CompilationRelaxations.cs
- CompiledRegexRunner.cs
- ListItemConverter.cs
- NumberSubstitution.cs
- MultipleViewProviderWrapper.cs
- DesignerFrame.cs
- _TimerThread.cs
- BatchParser.cs
- ApplicationSecurityInfo.cs
- MexNamedPipeBindingElement.cs
- CheckBoxAutomationPeer.cs
- GenericArgumentsUpdater.cs
- AutoResetEvent.cs
- ExtensionElementCollection.cs
- LogPolicy.cs
- Internal.cs
- RawStylusInput.cs
- IItemProperties.cs
- RegistryKey.cs
- SplitterEvent.cs
- XPathScanner.cs
- FragmentQueryKB.cs
- ValueQuery.cs
- AttributeCollection.cs
- WebPartConnectVerb.cs
- DefaultTextStoreTextComposition.cs
- CheckBox.cs
- InstanceDataCollection.cs
- DesignerSerializationManager.cs
- RuntimeConfigurationRecord.cs
- Mappings.cs
- CodeGeneratorAttribute.cs
- ServerIdentity.cs
- InputLangChangeRequestEvent.cs
- Line.cs
- COM2TypeInfoProcessor.cs
- ObjectNavigationPropertyMapping.cs
- OrderByLifter.cs
- ActivityLocationReferenceEnvironment.cs
- DecimalAnimationBase.cs
- TableLayoutSettings.cs
- SplineKeyFrames.cs
- LinkedList.cs
- WindowProviderWrapper.cs
- Attributes.cs
- SchemaManager.cs
- sqlstateclientmanager.cs
- NamespaceEmitter.cs
- GridViewRowEventArgs.cs
- InvalidProgramException.cs
- FontEmbeddingManager.cs
- DivideByZeroException.cs
- PageCatalogPart.cs
- WorkingDirectoryEditor.cs
- XmlCustomFormatter.cs
- CounterSample.cs
- WithParamAction.cs
- XamlVector3DCollectionSerializer.cs
- ServerValidateEventArgs.cs
- Panel.cs
- RegexCode.cs
- ToolBar.cs
- ValidationErrorInfo.cs
- SqlWebEventProvider.cs
- PreDigestedSignedInfo.cs
- Convert.cs
- _TimerThread.cs
- WebPartTransformerAttribute.cs
- BrushConverter.cs
- _NetworkingPerfCounters.cs
- WebPartsPersonalizationAuthorization.cs
- HtmlEncodedRawTextWriter.cs
- InputScope.cs
- AnonymousIdentificationModule.cs
- RoutedEventConverter.cs
- XmlSchemaAttribute.cs
- AutomationPattern.cs
- BufferBuilder.cs
- DBConnection.cs
- CheckBoxList.cs
- ProviderConnectionPoint.cs
- ActiveXContainer.cs
- TextEditorLists.cs
- InputChannelBinder.cs
- GroupBox.cs
- XmlFileEditor.cs
- WebReference.cs
- RuleSettingsCollection.cs
- IndexingContentUnit.cs
- SoapExtensionTypeElementCollection.cs
- serverconfig.cs
- EllipticalNodeOperations.cs
- AssemblyNameProxy.cs