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
- COM2FontConverter.cs
- CodeGeneratorOptions.cs
- Size.cs
- CodeGotoStatement.cs
- ColumnBinding.cs
- BindingMemberInfo.cs
- RegexStringValidator.cs
- infer.cs
- StructuralCache.cs
- UndoManager.cs
- Viewport3DVisual.cs
- Action.cs
- BinaryMethodMessage.cs
- MeasurementDCInfo.cs
- TickBar.cs
- DetailsViewModeEventArgs.cs
- RectIndependentAnimationStorage.cs
- XPathNavigatorKeyComparer.cs
- HitTestDrawingContextWalker.cs
- xmlfixedPageInfo.cs
- RegexFCD.cs
- RootProfilePropertySettingsCollection.cs
- BuilderPropertyEntry.cs
- DocumentPageViewAutomationPeer.cs
- PassportAuthenticationEventArgs.cs
- DetailsViewDesigner.cs
- LinearKeyFrames.cs
- WebServiceEnumData.cs
- XmlSchemaDocumentation.cs
- entityreference_tresulttype.cs
- COM2Properties.cs
- HtmlElement.cs
- DecimalAnimationUsingKeyFrames.cs
- SeverityFilter.cs
- AmbientProperties.cs
- DataObjectEventArgs.cs
- InitializerFacet.cs
- RequiredFieldValidator.cs
- EntityKeyElement.cs
- LayoutExceptionEventArgs.cs
- RoutedEventHandlerInfo.cs
- OdbcErrorCollection.cs
- LoginCancelEventArgs.cs
- DataService.cs
- SimpleColumnProvider.cs
- SqlDataSourceView.cs
- ConfigurationElement.cs
- ThemeableAttribute.cs
- BufferBuilder.cs
- ButtonFieldBase.cs
- ZipIOZip64EndOfCentralDirectoryBlock.cs
- ServicePoint.cs
- WorkflowStateRollbackService.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- UIServiceHelper.cs
- QueueProcessor.cs
- XmlWrappingReader.cs
- Label.cs
- XmlReaderSettings.cs
- UnsafeNetInfoNativeMethods.cs
- InfoCardRSAOAEPKeyExchangeDeformatter.cs
- WindowsRichEditRange.cs
- MinimizableAttributeTypeConverter.cs
- EncodingTable.cs
- ThemeDirectoryCompiler.cs
- FieldAccessException.cs
- ListControlBoundActionList.cs
- GeneralTransform3D.cs
- BulletedListEventArgs.cs
- ObjectTokenCategory.cs
- ReflectionTypeLoadException.cs
- TemplateControl.cs
- AsyncResult.cs
- ResourcesChangeInfo.cs
- GenericXmlSecurityToken.cs
- TailPinnedEventArgs.cs
- LoginCancelEventArgs.cs
- HMACSHA256.cs
- DateRangeEvent.cs
- FamilyTypefaceCollection.cs
- SqlCommand.cs
- TypefaceMap.cs
- Vector3DConverter.cs
- ControllableStoryboardAction.cs
- HtmlInputText.cs
- WebPartConnectionsEventArgs.cs
- DependencyPropertyHelper.cs
- QueryPageSettingsEventArgs.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- SendMessageContent.cs
- SchemaDeclBase.cs
- XmlSchemaSimpleContentExtension.cs
- InputGestureCollection.cs
- DataViewManager.cs
- View.cs
- RepeaterItemCollection.cs
- DataPagerFieldCommandEventArgs.cs
- AnnotationComponentManager.cs
- SecurityTimestamp.cs
- NeutralResourcesLanguageAttribute.cs