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
- RSAOAEPKeyExchangeFormatter.cs
- TabControl.cs
- ConfigsHelper.cs
- SqlFunctions.cs
- OleDbEnumerator.cs
- PartialCachingAttribute.cs
- TableProviderWrapper.cs
- GenerateScriptTypeAttribute.cs
- CqlErrorHelper.cs
- SqlDataAdapter.cs
- MailMessage.cs
- StringOutput.cs
- basecomparevalidator.cs
- BidOverLoads.cs
- RectangleHotSpot.cs
- GeneralTransform2DTo3D.cs
- SqlWebEventProvider.cs
- DesignerLoader.cs
- MappingModelBuildProvider.cs
- ParseChildrenAsPropertiesAttribute.cs
- ExternalFile.cs
- WorkflowViewElement.cs
- BoundsDrawingContextWalker.cs
- Char.cs
- TextEditorTyping.cs
- XPathException.cs
- TcpClientSocketManager.cs
- ModuleBuilderData.cs
- WebColorConverter.cs
- RelOps.cs
- TypeGenericEnumerableViewSchema.cs
- SafeCryptContextHandle.cs
- XmlNodeChangedEventManager.cs
- CurrencyManager.cs
- TargetControlTypeAttribute.cs
- HttpRuntimeSection.cs
- SettingsPropertyValue.cs
- CollectionChange.cs
- BamlMapTable.cs
- MsmqReceiveHelper.cs
- UInt16.cs
- DataGridViewSelectedColumnCollection.cs
- DiagnosticsConfigurationHandler.cs
- ExeContext.cs
- clipboard.cs
- ReadOnlyCollectionBase.cs
- SiteOfOriginPart.cs
- DeviceFiltersSection.cs
- Point3DCollection.cs
- OdbcConnectionFactory.cs
- GenericArgumentsUpdater.cs
- SelectionListComponentEditor.cs
- NameValuePermission.cs
- PrivilegeNotHeldException.cs
- AmbientLight.cs
- GradientStopCollection.cs
- SmiGettersStream.cs
- FilteredXmlReader.cs
- FlowDocumentReader.cs
- ImageField.cs
- OleDbFactory.cs
- DataPagerField.cs
- DataGridViewCellValueEventArgs.cs
- ExeConfigurationFileMap.cs
- GridToolTip.cs
- CodeGroup.cs
- DataGridLinkButton.cs
- TreeView.cs
- WebPartTransformerAttribute.cs
- MultiTouchSystemGestureLogic.cs
- DataBindingList.cs
- Configuration.cs
- MethodBuilder.cs
- DataTableClearEvent.cs
- WorkflowTransactionOptions.cs
- CatalogPartDesigner.cs
- CodeTypeReferenceExpression.cs
- ObjectViewQueryResultData.cs
- DataGridCommandEventArgs.cs
- SQLMembershipProvider.cs
- BrowserDefinition.cs
- WindowsGraphics.cs
- PhysicalOps.cs
- Main.cs
- IPAddressCollection.cs
- BamlLocalizer.cs
- StatusBarItemAutomationPeer.cs
- BindToObject.cs
- RegisteredScript.cs
- PrefixHandle.cs
- HelloOperationAsyncResult.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- DocumentViewerAutomationPeer.cs
- Mapping.cs
- TemplateKey.cs
- InteropExecutor.cs
- AxParameterData.cs
- Registry.cs
- CellPartitioner.cs
- XPathNodeIterator.cs