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
- InternalException.cs
- WebService.cs
- SmtpFailedRecipientsException.cs
- InstanceHandleConflictException.cs
- HtmlCommandAdapter.cs
- FilterElement.cs
- KernelTypeValidation.cs
- HtmlHistory.cs
- XmlHierarchyData.cs
- BamlWriter.cs
- DynamicVirtualDiscoSearcher.cs
- DataKey.cs
- MailBnfHelper.cs
- MetabaseServerConfig.cs
- ConfigXmlReader.cs
- XmlDataDocument.cs
- CapabilitiesPattern.cs
- AttributeTableBuilder.cs
- HostedHttpContext.cs
- PngBitmapEncoder.cs
- ClientTargetCollection.cs
- webeventbuffer.cs
- CDSCollectionETWBCLProvider.cs
- InkCanvasInnerCanvas.cs
- CatalogZoneBase.cs
- XamlParser.cs
- DeferredReference.cs
- PopOutPanel.cs
- SerializationInfo.cs
- ColumnMap.cs
- SoapWriter.cs
- SplayTreeNode.cs
- Transform.cs
- AutoGeneratedField.cs
- ObjectFactoryCodeDomTreeGenerator.cs
- LineServices.cs
- TransformGroup.cs
- Separator.cs
- ProfessionalColorTable.cs
- TextLine.cs
- InternalConfigSettingsFactory.cs
- AssemblyHash.cs
- CompositeTypefaceMetrics.cs
- CodeGroup.cs
- WebPartEditVerb.cs
- EntityTypeEmitter.cs
- DataServiceContext.cs
- TrustSection.cs
- WindowsListViewSubItem.cs
- StatusBarAutomationPeer.cs
- CodeCommentStatement.cs
- RuntimeConfigurationRecord.cs
- GraphicsPathIterator.cs
- ContextStack.cs
- XmlSchemaCompilationSettings.cs
- TemplateControlParser.cs
- FutureFactory.cs
- newinstructionaction.cs
- MouseWheelEventArgs.cs
- NumberFormatter.cs
- CqlGenerator.cs
- CodeExporter.cs
- AttachmentCollection.cs
- MethodBody.cs
- ValidatingReaderNodeData.cs
- IteratorFilter.cs
- LinkArea.cs
- TextTreeUndo.cs
- ImageSourceValueSerializer.cs
- CodeIdentifier.cs
- DrawingVisual.cs
- XPathNodePointer.cs
- HMACSHA512.cs
- brushes.cs
- MediaEntryAttribute.cs
- EntityException.cs
- TypeReference.cs
- ControlPropertyNameConverter.cs
- MatchAllMessageFilter.cs
- SessionState.cs
- X500Name.cs
- remotingproxy.cs
- HScrollProperties.cs
- SerializationAttributes.cs
- XmlSerializerSection.cs
- ParseChildrenAsPropertiesAttribute.cs
- SqlBooleanMismatchVisitor.cs
- QilNode.cs
- DataGridViewIntLinkedList.cs
- HtmlTableRowCollection.cs
- OracleTransaction.cs
- HotSpotCollection.cs
- ElementInit.cs
- InheritedPropertyChangedEventArgs.cs
- FamilyTypeface.cs
- LocationChangedEventArgs.cs
- FunctionMappingTranslator.cs
- SetterBase.cs
- XmlSchemaChoice.cs
- _SSPIWrapper.cs