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
- FixedHyperLink.cs
- IdentityModelStringsVersion1.cs
- ItemAutomationPeer.cs
- ObjectComplexPropertyMapping.cs
- ADRoleFactory.cs
- DesignerOptionService.cs
- InvokeDelegate.cs
- UnsafeNativeMethods.cs
- DbConnectionPool.cs
- WorkflowExecutor.cs
- Msmq3PoisonHandler.cs
- InstanceDataCollection.cs
- GraphicsState.cs
- DeleteCardRequest.cs
- DataGridViewColumnStateChangedEventArgs.cs
- ZipArchive.cs
- SoapInteropTypes.cs
- WriteTimeStream.cs
- AssertUtility.cs
- SystemIPv4InterfaceProperties.cs
- Type.cs
- BindUriHelper.cs
- AutoGeneratedFieldProperties.cs
- ByteStorage.cs
- Form.cs
- SQLBinaryStorage.cs
- SendMessageRecord.cs
- DataGridSortCommandEventArgs.cs
- SynchronizationContext.cs
- WindowsFormsHostAutomationPeer.cs
- PrincipalPermission.cs
- InputScopeAttribute.cs
- Size.cs
- SessionEndingCancelEventArgs.cs
- ResolvedKeyFrameEntry.cs
- UInt16.cs
- InfoCardArgumentException.cs
- XmlSiteMapProvider.cs
- HttpListenerRequest.cs
- PointCollection.cs
- MessageDecoder.cs
- FlowLayoutPanel.cs
- Control.cs
- DynamicValueConverter.cs
- UserControlDocumentDesigner.cs
- HtmlTableCellCollection.cs
- CompatibleIComparer.cs
- DataGridToolTip.cs
- Freezable.cs
- DataViewManager.cs
- CssClassPropertyAttribute.cs
- QueryOutputWriter.cs
- IncrementalHitTester.cs
- HMAC.cs
- Cursor.cs
- CodeLabeledStatement.cs
- ConfigurationValidatorBase.cs
- Size3DConverter.cs
- NotificationContext.cs
- RegularExpressionValidator.cs
- UnsafeNativeMethods.cs
- WebPartMenu.cs
- Win32.cs
- GetPageCompletedEventArgs.cs
- XmlDataSource.cs
- ParameterCollection.cs
- BindingMemberInfo.cs
- Enum.cs
- StrokeRenderer.cs
- BuildProvider.cs
- XmlArrayItemAttribute.cs
- InfoCardRSACryptoProvider.cs
- Error.cs
- MergeFilterQuery.cs
- Token.cs
- MDIWindowDialog.cs
- WebPartRestoreVerb.cs
- ProxyManager.cs
- ButtonBaseAutomationPeer.cs
- ListViewGroup.cs
- UrlMappingsSection.cs
- CodeAccessSecurityEngine.cs
- DataBinder.cs
- validation.cs
- String.cs
- ResourceContainer.cs
- StorageMappingItemCollection.cs
- DrawItemEvent.cs
- SqlDelegatedTransaction.cs
- dbdatarecord.cs
- SchemaNotation.cs
- DateTimeFormat.cs
- TextSimpleMarkerProperties.cs
- MenuRendererClassic.cs
- SqlDataSourceCache.cs
- CategoryGridEntry.cs
- LambdaValue.cs
- IndexerNameAttribute.cs
- CompositeFontParser.cs
- DetailsViewPageEventArgs.cs