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
- Byte.cs
- EmptyCollection.cs
- CustomWebEventKey.cs
- TypeBuilderInstantiation.cs
- ControlValuePropertyAttribute.cs
- Oci.cs
- HtmlProps.cs
- StrongNameUtility.cs
- HyperLinkField.cs
- CommonGetThemePartSize.cs
- WebPartConnectionCollection.cs
- AutoResetEvent.cs
- PolicyChain.cs
- AppDomainEvidenceFactory.cs
- AsymmetricAlgorithm.cs
- PostBackTrigger.cs
- SQLMembershipProvider.cs
- Transactions.cs
- NewItemsContextMenuStrip.cs
- NotifyInputEventArgs.cs
- ListViewDeletedEventArgs.cs
- PointAnimationBase.cs
- Util.cs
- DbDataReader.cs
- LinqDataSourceUpdateEventArgs.cs
- StreamResourceInfo.cs
- PixelFormats.cs
- SystemIPv6InterfaceProperties.cs
- AliasGenerator.cs
- BaseAppDomainProtocolHandler.cs
- DetailsViewDeleteEventArgs.cs
- DecoderNLS.cs
- DBCommandBuilder.cs
- EtwTrace.cs
- CollectionDataContractAttribute.cs
- Italic.cs
- PartialTrustVisibleAssembliesSection.cs
- XmlUrlEditor.cs
- HtmlLink.cs
- InstanceLockException.cs
- PropertyRecord.cs
- ResourcePool.cs
- SchemaImporter.cs
- InertiaRotationBehavior.cs
- PresentationSource.cs
- SmiMetaDataProperty.cs
- StringStorage.cs
- DictionaryContent.cs
- XPathDocumentBuilder.cs
- VScrollBar.cs
- CodeExporter.cs
- MarshalDirectiveException.cs
- LayoutEvent.cs
- EndpointAddress10.cs
- LookupNode.cs
- Helper.cs
- __ConsoleStream.cs
- CustomAttributeSerializer.cs
- URIFormatException.cs
- UserPreferenceChangingEventArgs.cs
- WorkflowLayouts.cs
- PTProvider.cs
- EraserBehavior.cs
- ProfileService.cs
- StateInitializationDesigner.cs
- ShaperBuffers.cs
- MobilePage.cs
- FromRequest.cs
- List.cs
- TiffBitmapEncoder.cs
- StickyNote.cs
- XmlException.cs
- FileLogRecordStream.cs
- categoryentry.cs
- SqlAliasesReferenced.cs
- PropertyTabChangedEvent.cs
- SafeNativeMethods.cs
- ContractMapping.cs
- ByteAnimationBase.cs
- InvalidComObjectException.cs
- LinkConverter.cs
- Win32SafeHandles.cs
- UnaryOperationBinder.cs
- DefaultTextStore.cs
- DataGridViewComponentPropertyGridSite.cs
- ComponentChangedEvent.cs
- ScrollProperties.cs
- ProgressBarHighlightConverter.cs
- TypeLoadException.cs
- ViewGenerator.cs
- Group.cs
- UnionExpr.cs
- COM2Properties.cs
- Label.cs
- ChildTable.cs
- SafeLibraryHandle.cs
- TabControl.cs
- ProbeDuplex11AsyncResult.cs
- COM2FontConverter.cs
- Int32Rect.cs