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
- NGCSerializerAsync.cs
- TrackBar.cs
- XmlDownloadManager.cs
- XmlSchemaResource.cs
- FontEditor.cs
- Int64AnimationUsingKeyFrames.cs
- ArcSegment.cs
- EnumBuilder.cs
- RTTypeWrapper.cs
- XmlSerializationReader.cs
- ReachFixedPageSerializerAsync.cs
- AsyncPostBackErrorEventArgs.cs
- SpoolingTaskBase.cs
- Utils.cs
- DataSourceControl.cs
- WebPartEditorOkVerb.cs
- UpdatePanel.cs
- ModifierKeysValueSerializer.cs
- SchemaCollectionCompiler.cs
- Attribute.cs
- LayoutDump.cs
- autovalidator.cs
- COM2ColorConverter.cs
- ColumnClickEvent.cs
- SerializerDescriptor.cs
- ImageCodecInfoPrivate.cs
- GenericRootAutomationPeer.cs
- CategoryNameCollection.cs
- BindingSource.cs
- CatalogZoneBase.cs
- HtmlImage.cs
- EntityContainerRelationshipSet.cs
- HttpRuntime.cs
- DbProviderManifest.cs
- TreeBuilder.cs
- Polyline.cs
- ToolboxService.cs
- PenThreadWorker.cs
- XmlValueConverter.cs
- Cursor.cs
- XmlDesignerDataSourceView.cs
- TouchDevice.cs
- InputLanguageProfileNotifySink.cs
- CodeAttributeDeclaration.cs
- FixedPosition.cs
- StylusButton.cs
- ParallelRangeManager.cs
- GcHandle.cs
- FactoryGenerator.cs
- ArrayHelper.cs
- UrlMapping.cs
- SqlTypeSystemProvider.cs
- UnauthorizedAccessException.cs
- StylusPointPropertyInfo.cs
- MimeParameter.cs
- ProxyHelper.cs
- DataGridColumnEventArgs.cs
- MethodToken.cs
- ToolStripGrip.cs
- UnsafeNativeMethods.cs
- CellNormalizer.cs
- DataSysAttribute.cs
- BCryptSafeHandles.cs
- WorkflowRuntimeServiceElement.cs
- CustomCredentialPolicy.cs
- SQLDecimalStorage.cs
- DataGridBoundColumn.cs
- HyperLink.cs
- TextTreeUndo.cs
- TimerElapsedEvenArgs.cs
- ConsumerConnectionPointCollection.cs
- ListViewInsertionMark.cs
- UnmanagedMemoryStream.cs
- BamlLocalizableResourceKey.cs
- RepeaterItem.cs
- HwndHost.cs
- ScriptControlManager.cs
- ImageSource.cs
- ListView.cs
- DetailsViewRowCollection.cs
- HtmlInputRadioButton.cs
- StorageComplexPropertyMapping.cs
- GACMembershipCondition.cs
- propertytag.cs
- InternalDispatchObject.cs
- CollectionBuilder.cs
- StringInfo.cs
- OptimizedTemplateContent.cs
- PropertyEmitter.cs
- ExpandedWrapper.cs
- ImportOptions.cs
- ServerIdentity.cs
- SecurityRuntime.cs
- WebZone.cs
- DataGridColumnCollection.cs
- ZipIOBlockManager.cs
- TextRunTypographyProperties.cs
- Empty.cs
- cookiecollection.cs
- SqlError.cs