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
- PageThemeCodeDomTreeGenerator.cs
- BinaryReader.cs
- LocationEnvironment.cs
- CommandDevice.cs
- NameNode.cs
- MD5.cs
- DataGridItemCollection.cs
- EntityConnectionStringBuilder.cs
- DetailsViewUpdateEventArgs.cs
- formatter.cs
- OdbcUtils.cs
- BindingCompleteEventArgs.cs
- DbgUtil.cs
- Rectangle.cs
- GradientStop.cs
- PlacementWorkspace.cs
- SourceFileInfo.cs
- CommandBindingCollection.cs
- EdgeModeValidation.cs
- DeclaredTypeElementCollection.cs
- OraclePermissionAttribute.cs
- ButtonFlatAdapter.cs
- ExtendedPropertyInfo.cs
- CookieProtection.cs
- NativeMethods.cs
- BamlLocalizabilityResolver.cs
- ManipulationDevice.cs
- SignedPkcs7.cs
- ScriptingWebServicesSectionGroup.cs
- ConfigurationManagerInternalFactory.cs
- ExpressionBindingCollection.cs
- XmlRawWriter.cs
- MultipartContentParser.cs
- Guid.cs
- WebPartConnectionsConfigureVerb.cs
- DesignerActionItem.cs
- DataTransferEventArgs.cs
- Pen.cs
- AnimationTimeline.cs
- TraceLevelStore.cs
- ResponseStream.cs
- ChannelBinding.cs
- PerformanceCounterLib.cs
- CompilationUtil.cs
- BinHexDecoder.cs
- Invariant.cs
- BorderGapMaskConverter.cs
- StylusSystemGestureEventArgs.cs
- DataGridTextBox.cs
- Frame.cs
- TypedAsyncResult.cs
- FileIOPermission.cs
- OleDbDataAdapter.cs
- CustomUserNameSecurityTokenAuthenticator.cs
- DataControlLinkButton.cs
- InputReportEventArgs.cs
- HandledEventArgs.cs
- StorageRoot.cs
- MultiPropertyDescriptorGridEntry.cs
- DefaultSection.cs
- XmlObjectSerializer.cs
- HotCommands.cs
- IndexedEnumerable.cs
- SessionStateModule.cs
- WebBrowserPermission.cs
- ConfigurationLocation.cs
- XmlSchemaComplexType.cs
- XsltSettings.cs
- ReadOnlyObservableCollection.cs
- MLangCodePageEncoding.cs
- TreeViewItemAutomationPeer.cs
- ApplicationException.cs
- SoapObjectWriter.cs
- Preprocessor.cs
- Memoizer.cs
- ErrorTableItemStyle.cs
- itemelement.cs
- TrayIconDesigner.cs
- XsltContext.cs
- InternalDispatchObject.cs
- IisTraceWebEventProvider.cs
- AtomServiceDocumentSerializer.cs
- Compiler.cs
- ComponentChangingEvent.cs
- ResourcesChangeInfo.cs
- EdmEntityTypeAttribute.cs
- TimeManager.cs
- HttpCookiesSection.cs
- XPathMessageFilter.cs
- CommandHelper.cs
- SqlUDTStorage.cs
- PropertyDescriptor.cs
- TouchesCapturedWithinProperty.cs
- ListViewPagedDataSource.cs
- SoapMessage.cs
- ParameterCollection.cs
- QuarticEase.cs
- ThicknessConverter.cs
- DefaultCommandConverter.cs
- ProfileProvider.cs