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
- ComponentResourceKey.cs
- HighContrastHelper.cs
- DynamicQueryStringParameter.cs
- Variable.cs
- FileAccessException.cs
- XmlSignatureManifest.cs
- WindowsStartMenu.cs
- ScriptResourceAttribute.cs
- MetadataItemEmitter.cs
- FrameworkContextData.cs
- UnlockInstanceAsyncResult.cs
- OneOfTypeConst.cs
- JobInputBins.cs
- UriTemplateDispatchFormatter.cs
- DataTableCollection.cs
- LogEntry.cs
- GenerateScriptTypeAttribute.cs
- LocalsItemDescription.cs
- WpfXamlMember.cs
- DataGridViewSortCompareEventArgs.cs
- HttpServerChannel.cs
- XmlLanguage.cs
- AutomationAttributeInfo.cs
- WebControlsSection.cs
- MetadataUtilsSmi.cs
- EntitySqlException.cs
- TextServicesProperty.cs
- DbConnectionPoolCounters.cs
- TreeNodeBindingCollection.cs
- FontStretch.cs
- ConfigXmlText.cs
- DataPagerCommandEventArgs.cs
- BitmapEffectGroup.cs
- UInt16.cs
- DataRelation.cs
- RtfControls.cs
- Utils.cs
- InstanceCreationEditor.cs
- MSHTMLHost.cs
- MulticastOption.cs
- ProxyAttribute.cs
- DataTemplate.cs
- Bidi.cs
- DataSourceSelectArguments.cs
- X509ScopedServiceCertificateElement.cs
- WebBrowserNavigatingEventHandler.cs
- TraceUtility.cs
- XPathQueryGenerator.cs
- GridViewSelectEventArgs.cs
- DataRowCollection.cs
- DesignConnection.cs
- configsystem.cs
- Sentence.cs
- TimeSpanSecondsConverter.cs
- XpsSerializationManager.cs
- EventlogProvider.cs
- IfAction.cs
- UnionExpr.cs
- TrackingLocationCollection.cs
- TextBoxBase.cs
- DetailsViewUpdatedEventArgs.cs
- OrCondition.cs
- UnsafeNativeMethods.cs
- SafeLocalMemHandle.cs
- SqlUtils.cs
- WebPartMovingEventArgs.cs
- XmlCompatibilityReader.cs
- MetadataItemEmitter.cs
- FormViewDeletedEventArgs.cs
- SystemNetworkInterface.cs
- SessionParameter.cs
- ConsumerConnectionPointCollection.cs
- cookieexception.cs
- FunctionGenerator.cs
- TraceListeners.cs
- PaperSource.cs
- ViewBox.cs
- WebPartMenuStyle.cs
- PropertyValueChangedEvent.cs
- ToolStripItemCollection.cs
- ValueExpressions.cs
- PassportPrincipal.cs
- ListView.cs
- RuleSetReference.cs
- ServiceNameElementCollection.cs
- ObjectTag.cs
- ExpressionConverter.cs
- DataColumnCollection.cs
- DataObjectCopyingEventArgs.cs
- counter.cs
- ValueTypeFixupInfo.cs
- ActivationWorker.cs
- VisualProxy.cs
- RawStylusInputCustomDataList.cs
- RelationshipDetailsRow.cs
- GridItemProviderWrapper.cs
- MulticastDelegate.cs
- ConfigXmlCDataSection.cs
- ControlUtil.cs
- BamlRecordReader.cs