MemberAssignment.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / 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.
/* **************************************************************************** 
 *
 * 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

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK