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
- SerializableAttribute.cs
- BitmapVisualManager.cs
- CreateParams.cs
- HttpValueCollection.cs
- FixedSOMPage.cs
- TripleDESCryptoServiceProvider.cs
- CustomCredentialPolicy.cs
- OdbcStatementHandle.cs
- ReadOnlyCollection.cs
- WrappedIUnknown.cs
- UpDownBase.cs
- ZoneButton.cs
- DataBindingExpressionBuilder.cs
- SqlBuilder.cs
- TrustManagerMoreInformation.cs
- SQLStringStorage.cs
- IPEndPoint.cs
- TextEmbeddedObject.cs
- RegexMatchCollection.cs
- ListViewGroupConverter.cs
- DataListItemEventArgs.cs
- CheckBox.cs
- CodeDOMUtility.cs
- VectorAnimationBase.cs
- _CacheStreams.cs
- CaseInsensitiveComparer.cs
- DataGridClipboardCellContent.cs
- MetaType.cs
- AsyncCompletedEventArgs.cs
- WindowsListViewItem.cs
- TextDecorationLocationValidation.cs
- ComboBoxRenderer.cs
- AppDomain.cs
- XmlSchemaSimpleTypeUnion.cs
- Attributes.cs
- TypeConverterHelper.cs
- TreeNode.cs
- OdbcParameter.cs
- ChannelSinkStacks.cs
- Size3D.cs
- DesignBindingValueUIHandler.cs
- CommandValueSerializer.cs
- TraceSource.cs
- RootProfilePropertySettingsCollection.cs
- RangeBaseAutomationPeer.cs
- ObjectQueryState.cs
- _Events.cs
- LockedActivityGlyph.cs
- LinearKeyFrames.cs
- BufferedReadStream.cs
- TextStore.cs
- CodeObject.cs
- EncodingTable.cs
- PrintDialogException.cs
- RegexCompiler.cs
- DetailsViewRow.cs
- RoleBoolean.cs
- ConfigurationValidatorAttribute.cs
- WorkflowServiceNamespace.cs
- BaseParser.cs
- Graph.cs
- ReceiveActivityDesigner.cs
- PrtCap_Reader.cs
- BindingMAnagerBase.cs
- SmiMetaDataProperty.cs
- ProcessExitedException.cs
- DescendantQuery.cs
- MetadataArtifactLoaderCompositeFile.cs
- ReferentialConstraint.cs
- SevenBitStream.cs
- EdmSchemaAttribute.cs
- Peer.cs
- DesignerWebPartChrome.cs
- HttpCookieCollection.cs
- ParameterModifier.cs
- TdsParserStateObject.cs
- InvokeWebService.cs
- DeclarativeCatalogPart.cs
- Calendar.cs
- TabControlEvent.cs
- ContextInformation.cs
- OleDbConnectionFactory.cs
- CheckedListBox.cs
- PhysicalFontFamily.cs
- XmlSchemaGroupRef.cs
- SoapSchemaImporter.cs
- Listener.cs
- HttpInputStream.cs
- ADMembershipUser.cs
- IODescriptionAttribute.cs
- XhtmlBasicObjectListAdapter.cs
- ArgumentException.cs
- Pair.cs
- ClientBuildManager.cs
- BindingListCollectionView.cs
- DataViewManagerListItemTypeDescriptor.cs
- ProfileParameter.cs
- RoutedEvent.cs
- SchemaTypeEmitter.cs
- Vector3DCollection.cs