Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Expressions / MemberExpressionHelper.cs / 1305376 / MemberExpressionHelper.cs
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//---------------------------------------------------------------
namespace System.Activities.Expressions
{
using System.Activities.Statements;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Reflection;
using System.Runtime;
using System.Collections.ObjectModel;
using System.Activities.Validation;
static class MemberExpressionHelper
{
public static void AddOperandArgument(CodeActivityMetadata metadata, InArgument operand, bool isRequired)
{
RuntimeArgument operandArgument = new RuntimeArgument("Operand", typeof(TOperand), ArgumentDirection.In, isRequired);
metadata.Bind(operand, operandArgument);
metadata.AddArgument(operandArgument);
}
public static void AddOperandLocationArgument(CodeActivityMetadata metadata, InOutArgument operandLocation, bool isRequired)
{
RuntimeArgument operandLocationArgument = new RuntimeArgument("OperandLocation", typeof(TOperand), ArgumentDirection.InOut, isRequired);
metadata.Bind(operandLocation, operandLocationArgument);
metadata.AddArgument(operandLocationArgument);
}
public static bool TryGenerateLinqDelegate(string memberName, bool isField, bool isStatic, out Func operation, out ValidationError validationError)
{
operation = null;
validationError = null;
try
{
ParameterExpression operandParameter = Expression.Parameter(typeof(TOperand), "operand");
MemberExpression memberExpression = null;
if (isStatic)
{
memberExpression = Expression.MakeMemberAccess(null, GetMemberInfo(memberName, isField));
}
else
{
memberExpression = Expression.MakeMemberAccess(operandParameter, GetMemberInfo(memberName, isField));
}
Expression> lambdaExpression = Expression.Lambda>(memberExpression, operandParameter);
operation = lambdaExpression.Compile();
return true;
}
catch (Exception e)
{
if (Fx.IsFatal(e))
{
throw;
}
validationError = new ValidationError(e.Message);
return false;
}
}
static MemberInfo GetMemberInfo(string memberName, bool isField)
{
MemberInfo result = null;
Type declaringType = typeof(TOperand);
if (!isField)
{
result = declaringType.GetProperty(memberName);
}
else
{
result = declaringType.GetField(memberName);
}
if (result == null)
{
throw FxTrace.Exception.AsError(new ValidationException(SR.MemberNotFound(memberName, typeof(TOperand).Name)));
}
return result;
}
}
}
// 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
- ToolStripSplitButton.cs
- SettingsBase.cs
- EventDescriptor.cs
- SortQuery.cs
- SqlClientWrapperSmiStream.cs
- TextElementCollectionHelper.cs
- PlacementWorkspace.cs
- SharedStream.cs
- ListViewGroupConverter.cs
- PDBReader.cs
- InputScopeManager.cs
- ToolStripItemEventArgs.cs
- AdapterDictionary.cs
- DistinctQueryOperator.cs
- CompareInfo.cs
- ObfuscateAssemblyAttribute.cs
- SystemWebExtensionsSectionGroup.cs
- ListViewPagedDataSource.cs
- HttpResponseHeader.cs
- TableLayoutPanel.cs
- ListDesigner.cs
- UdpRetransmissionSettings.cs
- SoapElementAttribute.cs
- UiaCoreApi.cs
- DesignerDataRelationship.cs
- IISMapPath.cs
- DataGridRow.cs
- ModulesEntry.cs
- ProxyFragment.cs
- CommonDialog.cs
- XPathDocumentNavigator.cs
- MenuCommandService.cs
- IndexingContentUnit.cs
- AuthorizationRule.cs
- XslVisitor.cs
- DataException.cs
- InitializerFacet.cs
- RectangleHotSpot.cs
- TableRow.cs
- OpenFileDialog.cs
- HeaderUtility.cs
- DataRow.cs
- DesignerForm.cs
- EmissiveMaterial.cs
- NativeRecognizer.cs
- GeometryCollection.cs
- MemoryStream.cs
- MessageQueuePermission.cs
- SingleObjectCollection.cs
- AppDomainResourcePerfCounters.cs
- BitmapImage.cs
- CacheManager.cs
- ParserHooks.cs
- CodeCatchClauseCollection.cs
- SymbolMethod.cs
- _UriSyntax.cs
- ProcessProtocolHandler.cs
- CurrentChangingEventArgs.cs
- ReferenceEqualityComparer.cs
- ImageKeyConverter.cs
- InputLangChangeEvent.cs
- RealizationDrawingContextWalker.cs
- GradientStop.cs
- RuntimeConfig.cs
- TripleDES.cs
- ToolStripComboBox.cs
- CopyCodeAction.cs
- XamlPathDataSerializer.cs
- UnitySerializationHolder.cs
- UInt32.cs
- TypeDescriptorFilterService.cs
- WorkflowDebuggerSteppingAttribute.cs
- XmlParserContext.cs
- AsymmetricSignatureFormatter.cs
- ServicePointManagerElement.cs
- JsonServiceDocumentSerializer.cs
- TableCell.cs
- CacheAxisQuery.cs
- CatalogPartChrome.cs
- TokenBasedSet.cs
- Int32AnimationUsingKeyFrames.cs
- CalloutQueueItem.cs
- ADMembershipProvider.cs
- ServicesExceptionNotHandledEventArgs.cs
- QilFactory.cs
- RectAnimationUsingKeyFrames.cs
- Volatile.cs
- AlternateView.cs
- DbCommandDefinition.cs
- AdornedElementPlaceholder.cs
- StorageEntityTypeMapping.cs
- ProxyHelper.cs
- ParameterBuilder.cs
- InputDevice.cs
- SplayTreeNode.cs
- BaseDataListActionList.cs
- SelectedGridItemChangedEvent.cs
- ClientUtils.cs
- WebHeaderCollection.cs
- DataGridState.cs