Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Expressions / Cast.cs / 1305376 / Cast.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Expressions { using System.Activities; using System.Activities.Statements; using System.Activities.Validation; using System.Collections.Generic; using System.ComponentModel; using System.Linq.Expressions; using System.Runtime; public sealed class Cast: CodeActivity { //Lock is not needed for operationFunction here. The reason is that delegates for a given Cast are the same. //It's possible that 2 threads are assigning the operationFucntion at the same time. But it's okay because the compiled codes are the same. static Func checkedOperationFunction; static Func uncheckedOperationFunction; bool checkedOperation = true; [RequiredArgument] [DefaultValue(null)] public InArgument Operand { get; set; } [DefaultValue(true)] public bool Checked { get { return this.checkedOperation; } set { this.checkedOperation = value; } } protected override void CacheMetadata(CodeActivityMetadata metadata) { UnaryExpressionHelper.OnGetArguments(metadata, this.Operand); if (this.checkedOperation) { EnsureOperationFunction(metadata, ref checkedOperationFunction, ExpressionType.ConvertChecked); } else { EnsureOperationFunction(metadata, ref uncheckedOperationFunction, ExpressionType.Convert); } } void EnsureOperationFunction(CodeActivityMetadata metadata, ref Func operationFunction, ExpressionType operatorType) { if (operationFunction == null) { ValidationError validationError; if (!UnaryExpressionHelper.TryGenerateLinqDelegate( operatorType, out operationFunction, out validationError)) { metadata.AddValidationError(validationError); } } } protected override TResult Execute(CodeActivityContext context) { TOperand operandValue = this.Operand.Get(context); //if user changed Checked flag between Open and Execution, //a NRE may be thrown and that's by design if (this.checkedOperation) { return checkedOperationFunction(operandValue); } else { return uncheckedOperationFunction(operandValue); } } } } // 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
- SqlIdentifier.cs
- ImpersonationContext.cs
- HttpCookieCollection.cs
- TdsParserStaticMethods.cs
- CatalogZoneBase.cs
- JoinCqlBlock.cs
- EntityDataSourceChangingEventArgs.cs
- OutOfMemoryException.cs
- ClientTarget.cs
- sqlstateclientmanager.cs
- PassportAuthentication.cs
- X509Extension.cs
- ConfigurationElementProperty.cs
- ChangeInterceptorAttribute.cs
- IteratorFilter.cs
- WebPartConnectionsCloseVerb.cs
- HostVisual.cs
- ManagementClass.cs
- _ChunkParse.cs
- Ray3DHitTestResult.cs
- XmlMessageFormatter.cs
- XPathBuilder.cs
- SvcMapFile.cs
- MouseActionConverter.cs
- ProfileEventArgs.cs
- DesignerHelpers.cs
- CustomGrammar.cs
- DataGridViewAutoSizeModeEventArgs.cs
- BindUriHelper.cs
- AttributeEmitter.cs
- BaseDataListActionList.cs
- FontStyles.cs
- RSAPKCS1KeyExchangeFormatter.cs
- CodeRegionDirective.cs
- MsmqIntegrationElement.cs
- MemberAssignment.cs
- AnnotationMap.cs
- SqlParameterizer.cs
- PageOutputQuality.cs
- _SslStream.cs
- StandardTransformFactory.cs
- EncoderExceptionFallback.cs
- ParagraphVisual.cs
- UriExt.cs
- HtmlProps.cs
- _Win32.cs
- ConfigurationValidatorAttribute.cs
- OperandQuery.cs
- SimpleExpression.cs
- Select.cs
- WeakReadOnlyCollection.cs
- TcpConnectionPoolSettings.cs
- CheckableControlBaseAdapter.cs
- ThreadExceptionDialog.cs
- Schema.cs
- TextEditorSelection.cs
- DataGridViewTextBoxColumn.cs
- DynamicEndpointElement.cs
- UpDownBase.cs
- GuidConverter.cs
- PropertyChangedEventManager.cs
- DataGridViewCellConverter.cs
- XamlInt32CollectionSerializer.cs
- GridPatternIdentifiers.cs
- DebugView.cs
- OleDbConnectionFactory.cs
- WorkflowQueueInfo.cs
- ItemCollection.cs
- MessageBox.cs
- securitymgrsite.cs
- AssemblyBuilder.cs
- StandardBindingCollectionElement.cs
- StorageComplexPropertyMapping.cs
- TraceSection.cs
- MetadataSource.cs
- PanelStyle.cs
- DeferrableContentConverter.cs
- PolyLineSegmentFigureLogic.cs
- PingOptions.cs
- FeatureManager.cs
- CompressStream.cs
- RightsManagementEncryptedStream.cs
- PrincipalPermission.cs
- BooleanKeyFrameCollection.cs
- HtmlControl.cs
- CSharpCodeProvider.cs
- SafeRegistryHandle.cs
- sqlinternaltransaction.cs
- NameSpaceEvent.cs
- AutomationPeer.cs
- DrawingDrawingContext.cs
- SqlMetaData.cs
- DataGridCommandEventArgs.cs
- PageRanges.cs
- FontConverter.cs
- XPathPatternParser.cs
- ActivityDesignerAccessibleObject.cs
- ProcessModelSection.cs
- MethodAccessException.cs
- ScrollItemProviderWrapper.cs