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
- HttpCapabilitiesEvaluator.cs
- ActiveDocumentEvent.cs
- CodeExpressionStatement.cs
- PenThreadWorker.cs
- XmlSerializerAssemblyAttribute.cs
- XmlSchema.cs
- SoapCodeExporter.cs
- CompositeDataBoundControl.cs
- FrameAutomationPeer.cs
- InstanceDataCollection.cs
- SEHException.cs
- CommonDialog.cs
- ChannelSinkStacks.cs
- Annotation.cs
- RequestNavigateEventArgs.cs
- MiniConstructorInfo.cs
- ZipIOEndOfCentralDirectoryBlock.cs
- EventLogConfiguration.cs
- InfoCardKeyedHashAlgorithm.cs
- DesignRelation.cs
- Rect.cs
- CompilerError.cs
- AnnotationResourceCollection.cs
- AsyncWaitHandle.cs
- DictionaryItemsCollection.cs
- Pkcs7Signer.cs
- DesignerEventService.cs
- NotifyInputEventArgs.cs
- PartialCachingControl.cs
- ParameterBuilder.cs
- FileUpload.cs
- DesignerActionVerbList.cs
- AsymmetricKeyExchangeFormatter.cs
- SharedPersonalizationStateInfo.cs
- NodeCounter.cs
- CaseKeyBox.ViewModel.cs
- LinqMaximalSubtreeNominator.cs
- WSSecurityOneDotZeroReceiveSecurityHeader.cs
- OutputScopeManager.cs
- Byte.cs
- XPathNodePointer.cs
- VariableBinder.cs
- CodeSnippetExpression.cs
- StylusButtonCollection.cs
- SecuritySessionClientSettings.cs
- ReturnEventArgs.cs
- FileBasedResourceGroveler.cs
- BatchParser.cs
- sapiproxy.cs
- SafeProcessHandle.cs
- _Win32.cs
- Viewport2DVisual3D.cs
- DrawingContextWalker.cs
- DataBindingExpressionBuilder.cs
- WrapPanel.cs
- Rect3DConverter.cs
- ReadOnlyState.cs
- Ppl.cs
- baseaxisquery.cs
- PartialCachingAttribute.cs
- IssuedTokensHeader.cs
- AxisAngleRotation3D.cs
- DataGridLength.cs
- XmlSchemaAnnotation.cs
- LinqDataSourceInsertEventArgs.cs
- ValueQuery.cs
- Math.cs
- SchemaImporterExtension.cs
- MatrixTransform.cs
- EntityStoreSchemaFilterEntry.cs
- ValuePatternIdentifiers.cs
- HtmlEmptyTagControlBuilder.cs
- ReflectionUtil.cs
- PipelineComponent.cs
- UriTemplateVariableQueryValue.cs
- AggregateNode.cs
- EncoderExceptionFallback.cs
- SchemaImporter.cs
- DescendentsWalker.cs
- TextViewSelectionProcessor.cs
- CookielessHelper.cs
- InkCollectionBehavior.cs
- StylusEventArgs.cs
- BitStream.cs
- PreProcessor.cs
- ModulesEntry.cs
- TraceXPathNavigator.cs
- TraceData.cs
- ConfigurationValidatorAttribute.cs
- ProcessHostFactoryHelper.cs
- Point3DValueSerializer.cs
- TransformedBitmap.cs
- SecureEnvironment.cs
- Number.cs
- XPathDocumentNavigator.cs
- WebServiceHandlerFactory.cs
- OdbcConnectionStringbuilder.cs
- CompressedStack.cs
- ExecutionTracker.cs
- EventDriven.cs