Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Expressions / FieldReference.cs / 1305376 / FieldReference.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.Expressions { using System.ComponentModel; using System.Reflection; using System.Runtime; using System.Runtime.Serialization; public sealed class FieldReference: CodeActivity > { FieldInfo fieldInfo; public FieldReference() : base() { } [DefaultValue(null)] public string FieldName { get; set; } [DefaultValue(null)] public InArgument Operand { get; set; } protected override void CacheMetadata(CodeActivityMetadata metadata) { bool isRequired = false; if (typeof(TOperand).IsEnum) { metadata.AddValidationError(SR.TargetTypeCannotBeEnum(this.GetType().Name, this.DisplayName)); } else if (typeof(TOperand).IsValueType) { metadata.AddValidationError(SR.TargetTypeIsValueType(this.GetType().Name, this.DisplayName)); } if (string.IsNullOrEmpty(this.FieldName)) { metadata.AddValidationError(SR.ActivityPropertyMustBeSet("FieldName", this.DisplayName)); } else { Type operandType = typeof(TOperand); this.fieldInfo = operandType.GetField(this.FieldName); if (this.fieldInfo == null) { metadata.AddValidationError(SR.MemberNotFound(this.FieldName, typeof(TOperand).Name)); } else { if (fieldInfo.IsInitOnly) { metadata.AddValidationError(SR.MemberIsReadOnly(this.FieldName, typeof(TOperand).Name)); } isRequired = !this.fieldInfo.IsStatic; } } MemberExpressionHelper.AddOperandArgument(metadata, this.Operand, isRequired); } protected override Location Execute(CodeActivityContext context) { Fx.Assert(this.fieldInfo != null, "fieldInfo must not be null."); return new FieldLocation(this.fieldInfo, this.Operand.Get(context)); } [DataContract] class FieldLocation : Location { [DataMember] FieldInfo fieldInfo; [DataMember(EmitDefaultValue = false)] object owner; public FieldLocation(FieldInfo fieldInfo, object owner) : base() { this.fieldInfo = fieldInfo; this.owner = owner; } public override TResult Value { get { //if (!this.fieldInfo.IsStatic && this.owner == null) //{ // // The field is non-static, and obj is a null reference // if (this.fieldInfo.DeclaringType != null) // { // throw FxTrace.Exception.AsError(new ValidationException(SR.NullReferencedMemberAccess(this.fieldInfo.DeclaringType.Name, this.fieldInfo.Name))); // } // else // { // throw FxTrace.Exception.AsError(new ValidationException(SR.NullReferencedMemberAccess(typeof(FieldInfo), "DeclaringType"))); // } //} return (TResult)this.fieldInfo.GetValue(this.owner); } set { //if (!this.fieldInfo.IsStatic && this.owner == null) //{ // if (this.fieldInfo.DeclaringType != null) // { // // The field is non-static, and obj is a null reference // throw FxTrace.Exception.AsError(new ValidationException(SR.NullReferencedMemberAccess(this.fieldInfo.DeclaringType.Name, this.fieldInfo.Name))); // } // else // { // throw FxTrace.Exception.AsError(new ValidationException(SR.NullReferencedMemberAccess(typeof(FieldInfo), "DeclaringType"))); // } //} this.fieldInfo.SetValue(this.owner, value); } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ParenthesizePropertyNameAttribute.cs
- linebase.cs
- NullReferenceException.cs
- Axis.cs
- XmlAggregates.cs
- EpmSyndicationContentDeSerializer.cs
- DataGridViewAdvancedBorderStyle.cs
- SystemMulticastIPAddressInformation.cs
- Soap12ServerProtocol.cs
- Attributes.cs
- DetailsViewPagerRow.cs
- SweepDirectionValidation.cs
- Pkcs7Recipient.cs
- HostingEnvironment.cs
- DataGridViewTopLeftHeaderCell.cs
- smtpconnection.cs
- CodeBlockBuilder.cs
- DataDocumentXPathNavigator.cs
- Duration.cs
- RangeValuePatternIdentifiers.cs
- CaretElement.cs
- SqlTriggerContext.cs
- DataFormats.cs
- ListViewInsertedEventArgs.cs
- MapPathBasedVirtualPathProvider.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- ManagedFilter.cs
- mil_sdk_version.cs
- XmlChildNodes.cs
- XmlSerializerFaultFormatter.cs
- Enum.cs
- DistributedTransactionPermission.cs
- BasicViewGenerator.cs
- EpmCustomContentSerializer.cs
- DiscreteKeyFrames.cs
- DoubleLink.cs
- SetStoryboardSpeedRatio.cs
- SpnEndpointIdentity.cs
- Exceptions.cs
- CodeCatchClauseCollection.cs
- CaseStatement.cs
- ClassicBorderDecorator.cs
- ArraySet.cs
- SqlCacheDependency.cs
- ContainerActivationHelper.cs
- LabelInfo.cs
- LinkClickEvent.cs
- FontDriver.cs
- WebPartConnectionsCancelEventArgs.cs
- DES.cs
- XmlSecureResolver.cs
- ZipIOLocalFileBlock.cs
- Hashtable.cs
- AssemblyHash.cs
- Typography.cs
- ControlBuilder.cs
- FormsAuthenticationConfiguration.cs
- ManipulationLogic.cs
- ImportOptions.cs
- ResourcesGenerator.cs
- ProcessProtocolHandler.cs
- EdmItemError.cs
- XPathMultyIterator.cs
- StorageSetMapping.cs
- TreeNodeClickEventArgs.cs
- IdentifierCollection.cs
- HMACSHA1.cs
- XhtmlBasicCommandAdapter.cs
- CheckableControlBaseAdapter.cs
- TableProvider.cs
- SqlCacheDependencyDatabase.cs
- OracleBinary.cs
- NavigationEventArgs.cs
- XmlChildEnumerator.cs
- sqlcontext.cs
- DeviceSpecificChoice.cs
- DescendantOverDescendantQuery.cs
- RuleInfoComparer.cs
- FirstMatchCodeGroup.cs
- SystemResourceHost.cs
- SudsParser.cs
- HttpSessionStateWrapper.cs
- SafeRightsManagementQueryHandle.cs
- ProjectionPathBuilder.cs
- SocketElement.cs
- AtomicFile.cs
- ToggleButtonAutomationPeer.cs
- keycontainerpermission.cs
- MatrixTransform.cs
- SqlTypeConverter.cs
- UnmanagedMemoryStream.cs
- columnmapfactory.cs
- NullRuntimeConfig.cs
- Empty.cs
- DataControlField.cs
- DataGridLength.cs
- AutoFocusStyle.xaml.cs
- PtsPage.cs
- InfiniteIntConverter.cs
- InputEventArgs.cs