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
- ContainerControl.cs
- CellIdBoolean.cs
- SqlDataSourceCache.cs
- Header.cs
- FlowLayoutSettings.cs
- SQLDateTime.cs
- AbandonedMutexException.cs
- RetrieveVirtualItemEventArgs.cs
- Thread.cs
- SplitContainer.cs
- RegularExpressionValidator.cs
- Rule.cs
- EventSinkHelperWriter.cs
- SafeCoTaskMem.cs
- smtppermission.cs
- MessageSmuggler.cs
- CharacterHit.cs
- SpeechSynthesizer.cs
- NativeMethods.cs
- XsltContext.cs
- MediaContext.cs
- SeverityFilter.cs
- MapPathBasedVirtualPathProvider.cs
- NullableBoolConverter.cs
- EventMappingSettings.cs
- dataprotectionpermissionattribute.cs
- ProfileEventArgs.cs
- BamlStream.cs
- SqlDelegatedTransaction.cs
- XmlUtil.cs
- XamlReader.cs
- PenLineJoinValidation.cs
- AttributeEmitter.cs
- XmlDataCollection.cs
- ServiceOperation.cs
- ListViewGroupConverter.cs
- MouseCaptureWithinProperty.cs
- PropertyIDSet.cs
- safePerfProviderHandle.cs
- DefaultTextStoreTextComposition.cs
- TypeExtension.cs
- SoapAttributes.cs
- MimeTypeAttribute.cs
- FontSource.cs
- CodeDOMUtility.cs
- DependencyPropertyKey.cs
- ConfigurationManagerInternal.cs
- GlobalProxySelection.cs
- RelativeSource.cs
- CollectionViewGroupRoot.cs
- SizeConverter.cs
- SQLInt64Storage.cs
- StackBuilderSink.cs
- EntityContainer.cs
- PreservationFileReader.cs
- InstanceView.cs
- FrameDimension.cs
- DataException.cs
- ArgumentOutOfRangeException.cs
- MethodBuilderInstantiation.cs
- KeySpline.cs
- SqlSelectStatement.cs
- DirectoryObjectSecurity.cs
- Vector3DConverter.cs
- WindowsAltTab.cs
- WsdlWriter.cs
- ApplicationHost.cs
- CodeDirectionExpression.cs
- FixedPageAutomationPeer.cs
- ComplexPropertyEntry.cs
- BasicSecurityProfileVersion.cs
- DataTablePropertyDescriptor.cs
- FixedSOMLineRanges.cs
- ResourceReferenceExpression.cs
- SpecularMaterial.cs
- XmlWriterDelegator.cs
- GB18030Encoding.cs
- XslException.cs
- DynamicResourceExtension.cs
- DataGridViewTextBoxColumn.cs
- Point3D.cs
- IdentityVerifier.cs
- precedingquery.cs
- TabControlAutomationPeer.cs
- SchemaTypeEmitter.cs
- SmtpReplyReaderFactory.cs
- CharStorage.cs
- Privilege.cs
- TextBounds.cs
- XMLSyntaxException.cs
- TextBoxBase.cs
- OdbcFactory.cs
- PseudoWebRequest.cs
- WebPartConnection.cs
- Style.cs
- TraceLog.cs
- ErasingStroke.cs
- CryptoKeySecurity.cs
- BulletedListDesigner.cs
- TypeForwardedToAttribute.cs