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
- COM2Enum.cs
- DataGridToolTip.cs
- LocalizableResourceBuilder.cs
- AsyncOperationManager.cs
- ConfigXmlAttribute.cs
- PropertyPathWorker.cs
- DesignerDataSchemaClass.cs
- MbpInfo.cs
- IsolatedStorageFileStream.cs
- RuntimeCompatibilityAttribute.cs
- SpeechRecognitionEngine.cs
- CheckBoxAutomationPeer.cs
- InplaceBitmapMetadataWriter.cs
- DeviceSpecificDialogCachedState.cs
- TypographyProperties.cs
- ListViewInsertEventArgs.cs
- ClassData.cs
- QuaternionAnimation.cs
- GZipUtils.cs
- ProcessModule.cs
- CancelEventArgs.cs
- OwnerDrawPropertyBag.cs
- TransformerInfoCollection.cs
- DataGridPageChangedEventArgs.cs
- GridItem.cs
- InvalidWorkflowException.cs
- ReadOnlyHierarchicalDataSource.cs
- LongMinMaxAggregationOperator.cs
- AddInStore.cs
- EdmFunctions.cs
- MessageEventSubscriptionService.cs
- HtmlFormWrapper.cs
- HandleCollector.cs
- BindingCollection.cs
- HTTPNotFoundHandler.cs
- SafeCryptHandles.cs
- CodeDirectoryCompiler.cs
- GeneralTransform3DGroup.cs
- WmpBitmapDecoder.cs
- CellTreeNode.cs
- SemanticValue.cs
- WindowsFont.cs
- BatchServiceHost.cs
- XslTransform.cs
- FormViewPageEventArgs.cs
- TypeConverterValueSerializer.cs
- _SslSessionsCache.cs
- WriteTimeStream.cs
- CacheAxisQuery.cs
- Rectangle.cs
- SafeNativeMethods.cs
- ToolStripDropDownClosingEventArgs.cs
- GiveFeedbackEvent.cs
- DesignerValidationSummaryAdapter.cs
- XmlQueryRuntime.cs
- MenuEventArgs.cs
- QilReference.cs
- DependencyObject.cs
- DataGridViewColumn.cs
- MaterialGroup.cs
- PreservationFileReader.cs
- SqlHelper.cs
- WebReference.cs
- CompositionTarget.cs
- HttpCacheVaryByContentEncodings.cs
- AppSettingsExpressionBuilder.cs
- ExclusiveTcpListener.cs
- PointAnimationClockResource.cs
- UriExt.cs
- FormsAuthenticationUserCollection.cs
- CodeNamespaceImport.cs
- FixedSOMLineCollection.cs
- CommandPlan.cs
- RegexMatch.cs
- Visual3DCollection.cs
- EmptyQuery.cs
- ProxyAttribute.cs
- ElapsedEventArgs.cs
- MessageQueue.cs
- PartialCachingAttribute.cs
- BlockUIContainer.cs
- RelationshipWrapper.cs
- GridViewSortEventArgs.cs
- StatusBarAutomationPeer.cs
- StringReader.cs
- UpdateEventArgs.cs
- ThreadPool.cs
- TextSchema.cs
- DbProviderManifest.cs
- Button.cs
- MethodBuilder.cs
- XmlCodeExporter.cs
- ComplexPropertyEntry.cs
- WebPartConnectionsEventArgs.cs
- ScaleTransform3D.cs
- InvalidCastException.cs
- SuppressMessageAttribute.cs
- ToolboxService.cs
- CapabilitiesRule.cs
- LocatorGroup.cs