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
- CustomWebEventKey.cs
- PixelFormat.cs
- BlockingCollection.cs
- RemoteWebConfigurationHost.cs
- LogAppendAsyncResult.cs
- WebConfigurationHostFileChange.cs
- Context.cs
- BrowserInteropHelper.cs
- Keywords.cs
- ExtensionFile.cs
- ControlTemplate.cs
- DbUpdateCommandTree.cs
- IdnMapping.cs
- CustomError.cs
- PeerNodeAddress.cs
- TabletDevice.cs
- Double.cs
- SequenceRangeCollection.cs
- FixedSOMGroup.cs
- Geometry3D.cs
- LessThanOrEqual.cs
- ProfileInfo.cs
- ToolBarButtonClickEvent.cs
- PlaceHolder.cs
- TextModifier.cs
- DataObject.cs
- InstanceDataCollectionCollection.cs
- CfgArc.cs
- ExtendedPropertyDescriptor.cs
- SslStream.cs
- UnauthorizedWebPart.cs
- ErrorsHelper.cs
- NativeWrapper.cs
- InputLanguageManager.cs
- uribuilder.cs
- KeyInstance.cs
- ContextMenuAutomationPeer.cs
- XmlWrappingWriter.cs
- TranslateTransform3D.cs
- ResourceAttributes.cs
- InkCanvas.cs
- Timer.cs
- Message.cs
- XNodeNavigator.cs
- _NativeSSPI.cs
- GradientSpreadMethodValidation.cs
- EntitySqlQueryCacheEntry.cs
- JoinSymbol.cs
- PlaceHolder.cs
- DateTimePicker.cs
- ListViewVirtualItemsSelectionRangeChangedEvent.cs
- CompatibleComparer.cs
- nulltextnavigator.cs
- WebPartConnectVerb.cs
- ImageList.cs
- HttpHeaderCollection.cs
- DbModificationClause.cs
- MessageQueueAccessControlEntry.cs
- WebProxyScriptElement.cs
- WMIInterop.cs
- C14NUtil.cs
- ActivationServices.cs
- XmlSchemaSimpleContentExtension.cs
- SoapReflectionImporter.cs
- Win32SafeHandles.cs
- BrowserDefinitionCollection.cs
- InternalBufferOverflowException.cs
- StyleXamlTreeBuilder.cs
- RC2.cs
- SafeFileHandle.cs
- MultiViewDesigner.cs
- WorkflowServiceAttributes.cs
- DragEventArgs.cs
- SqlMultiplexer.cs
- SessionStateItemCollection.cs
- Int64Converter.cs
- ScalarType.cs
- CharacterBufferReference.cs
- Constraint.cs
- XsltQilFactory.cs
- precedingquery.cs
- SourceItem.cs
- PointHitTestParameters.cs
- UpdateTranslator.cs
- ContractMapping.cs
- StrongNameSignatureInformation.cs
- WSSecurityOneDotZeroSendSecurityHeader.cs
- LicenseProviderAttribute.cs
- xmlformatgeneratorstatics.cs
- MergeEnumerator.cs
- QilPatternFactory.cs
- GridSplitter.cs
- XmlReaderSettings.cs
- ActivityMarkupSerializationProvider.cs
- ControlDesigner.cs
- Expression.cs
- HttpInputStream.cs
- PersonalizationState.cs
- SimpleRecyclingCache.cs
- StreamHelper.cs