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
- CallbackValidatorAttribute.cs
- SessionEndingEventArgs.cs
- SmiConnection.cs
- CodeIdentifiers.cs
- ReachPrintTicketSerializer.cs
- EventSinkHelperWriter.cs
- DispatcherHooks.cs
- ListComponentEditorPage.cs
- SqlAggregateChecker.cs
- ToolBarOverflowPanel.cs
- RawStylusInputCustomData.cs
- CodeDirectionExpression.cs
- TemplateKeyConverter.cs
- Int64Storage.cs
- PlaceHolder.cs
- XmlDigitalSignatureProcessor.cs
- Empty.cs
- ContractsBCL.cs
- TextParentUndoUnit.cs
- MenuBase.cs
- TemplatedMailWebEventProvider.cs
- VisualTreeUtils.cs
- SapiRecoInterop.cs
- Utils.cs
- LoginAutoFormat.cs
- CacheVirtualItemsEvent.cs
- DatagridviewDisplayedBandsData.cs
- SourceFileBuildProvider.cs
- SafeNativeMethods.cs
- SafeRightsManagementPubHandle.cs
- CallId.cs
- FlowDocumentPage.cs
- XPathNodeList.cs
- TimeoutException.cs
- Package.cs
- ToolStripContainerActionList.cs
- Slider.cs
- FilteredAttributeCollection.cs
- CodeConditionStatement.cs
- WebSysDisplayNameAttribute.cs
- DataBinding.cs
- X509ScopedServiceCertificateElementCollection.cs
- ContextMenuStripGroup.cs
- QilStrConcat.cs
- InputManager.cs
- SendMailErrorEventArgs.cs
- ImpersonateTokenRef.cs
- WpfKnownType.cs
- ServicePointManagerElement.cs
- OptimisticConcurrencyException.cs
- NameObjectCollectionBase.cs
- CustomAttribute.cs
- ExpressionCopier.cs
- TextProperties.cs
- XmlSchemaValidator.cs
- CodeDomDesignerLoader.cs
- HttpHeaderCollection.cs
- SoapAttributeAttribute.cs
- SoapAttributeAttribute.cs
- PropertyItem.cs
- StorageAssociationTypeMapping.cs
- GridViewUpdatedEventArgs.cs
- ObjectMemberMapping.cs
- HotSpotCollection.cs
- HyperLinkField.cs
- IProvider.cs
- RemotingConfiguration.cs
- DataGridViewCellFormattingEventArgs.cs
- ExecutionEngineException.cs
- SpotLight.cs
- NumericUpDownAcceleration.cs
- FrameworkReadOnlyPropertyMetadata.cs
- DataGridCommandEventArgs.cs
- PassportIdentity.cs
- Journal.cs
- COM2TypeInfoProcessor.cs
- TemplatePartAttribute.cs
- AvTrace.cs
- AbstractDataSvcMapFileLoader.cs
- SourceSwitch.cs
- ToolStripComboBox.cs
- KeyNotFoundException.cs
- XmlEncodedRawTextWriter.cs
- shaperfactoryquerycacheentry.cs
- MenuItemCollection.cs
- BinaryObjectReader.cs
- SerializerDescriptor.cs
- RankException.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- EqualityComparer.cs
- SparseMemoryStream.cs
- DataBindingCollection.cs
- COM2PropertyBuilderUITypeEditor.cs
- WindowsAuthenticationEventArgs.cs
- DataObjectEventArgs.cs
- ContentElementCollection.cs
- TypeReference.cs
- SecurityTokenAuthenticator.cs
- NullRuntimeConfig.cs
- SocketPermission.cs