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
- WebPartHeaderCloseVerb.cs
- MemberRestriction.cs
- DesignerActionService.cs
- ClientSponsor.cs
- ExpressionBuilderCollection.cs
- PersonalizationStateInfo.cs
- SessionIDManager.cs
- RoutedPropertyChangedEventArgs.cs
- DispatchChannelSink.cs
- ExpressionCopier.cs
- CallbackDebugElement.cs
- EmbeddedMailObject.cs
- WindowInteropHelper.cs
- PasswordTextContainer.cs
- RadioButtonStandardAdapter.cs
- GuidConverter.cs
- HMACSHA1.cs
- SlotInfo.cs
- DataGridViewRow.cs
- FileDialogCustomPlacesCollection.cs
- ConfigXmlText.cs
- Crc32Helper.cs
- ClientSession.cs
- DataQuery.cs
- WmpBitmapDecoder.cs
- ParsedAttributeCollection.cs
- MethodImplAttribute.cs
- FlagsAttribute.cs
- ObjectView.cs
- DataSourceIDConverter.cs
- HtmlControlPersistable.cs
- SQLInt64Storage.cs
- TextParaClient.cs
- BulletedList.cs
- BitmapData.cs
- PTConverter.cs
- LayoutInformation.cs
- SatelliteContractVersionAttribute.cs
- DataSourceComponent.cs
- SecurityState.cs
- HttpRequestContext.cs
- NCryptNative.cs
- SchemaMerger.cs
- SqlConnectionManager.cs
- BoundPropertyEntry.cs
- PropertyValueUIItem.cs
- ExceptionHelpers.cs
- CachedPathData.cs
- ErrorEventArgs.cs
- XmlSchemaValidationException.cs
- OutputCacheSection.cs
- ToolStripDesignerUtils.cs
- FileLevelControlBuilderAttribute.cs
- InstanceCollisionException.cs
- ParameterElementCollection.cs
- WorkflowFileItem.cs
- MSAANativeProvider.cs
- MarkupCompiler.cs
- DelegatingTypeDescriptionProvider.cs
- SQLDateTime.cs
- BaseCodePageEncoding.cs
- OpenFileDialog.cs
- ErrorFormatter.cs
- EmptyCollection.cs
- NamespaceEmitter.cs
- RSAPKCS1KeyExchangeFormatter.cs
- UnmanagedMemoryStream.cs
- ProtocolViolationException.cs
- XmlSchemaSimpleType.cs
- DeclaredTypeElementCollection.cs
- StandardToolWindows.cs
- PerfCounterSection.cs
- FirstMatchCodeGroup.cs
- TextChange.cs
- SqlDataSourceEnumerator.cs
- BoundField.cs
- HttpApplicationFactory.cs
- EntityClientCacheKey.cs
- CodeCommentStatement.cs
- _AcceptOverlappedAsyncResult.cs
- PropertyDescriptorComparer.cs
- DesignerTransactionCloseEvent.cs
- PDBReader.cs
- QuaternionAnimation.cs
- PropertyEmitter.cs
- Mutex.cs
- QueryExpr.cs
- MemberMaps.cs
- HttpWebRequest.cs
- RadioButton.cs
- RemotingServices.cs
- RuntimeCompatibilityAttribute.cs
- WmlSelectionListAdapter.cs
- HierarchicalDataTemplate.cs
- FragmentQueryProcessor.cs
- WindowsSecurityTokenAuthenticator.cs
- CodeTypeParameter.cs
- NavigationWindow.cs
- SQLInt16Storage.cs
- VisemeEventArgs.cs