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
- CatalogZoneBase.cs
- WrapperEqualityComparer.cs
- NameObjectCollectionBase.cs
- ErrorStyle.cs
- FontCollection.cs
- DnsCache.cs
- SqlConnectionString.cs
- RectangleConverter.cs
- HtmlElement.cs
- XPathNodeInfoAtom.cs
- SelectionListDesigner.cs
- ListViewTableCell.cs
- EntitySqlQueryCacheKey.cs
- updateconfighost.cs
- ResXResourceReader.cs
- Utils.cs
- AttachedPropertyDescriptor.cs
- Image.cs
- SystemMulticastIPAddressInformation.cs
- ProcessMessagesAsyncResult.cs
- XmlSchemaComplexContentExtension.cs
- HyperLinkField.cs
- SqlReorderer.cs
- BamlTreeNode.cs
- TransactionContextValidator.cs
- messageonlyhwndwrapper.cs
- AndCondition.cs
- AutomationElement.cs
- DispatcherSynchronizationContext.cs
- IDQuery.cs
- SinglePageViewer.cs
- AmbientLight.cs
- PagedDataSource.cs
- FacetChecker.cs
- SplitterEvent.cs
- DesignerForm.cs
- ContainerControl.cs
- CacheDependency.cs
- DataGridViewColumn.cs
- SortAction.cs
- TdsParserSessionPool.cs
- cookieexception.cs
- WindowShowOrOpenTracker.cs
- EndpointConfigContainer.cs
- VectorAnimation.cs
- BoundColumn.cs
- SafeLibraryHandle.cs
- DATA_BLOB.cs
- SafeNativeMethods.cs
- XmlWriterTraceListener.cs
- DesignerSerializationOptionsAttribute.cs
- XmlDataSourceNodeDescriptor.cs
- LineBreakRecord.cs
- ToolStripItemClickedEventArgs.cs
- Stopwatch.cs
- DataGridViewSortCompareEventArgs.cs
- HyperLinkColumn.cs
- ReadOnlyAttribute.cs
- XmlTypeMapping.cs
- FieldTemplateUserControl.cs
- ECDiffieHellmanPublicKey.cs
- arclist.cs
- ServicePointManagerElement.cs
- ObjectRef.cs
- Root.cs
- ObjectDataSourceStatusEventArgs.cs
- safex509handles.cs
- BamlResourceSerializer.cs
- userdatakeys.cs
- TabControlEvent.cs
- EventRouteFactory.cs
- SQLMoneyStorage.cs
- CommandBinding.cs
- _HelperAsyncResults.cs
- Triangle.cs
- HttpResponseInternalWrapper.cs
- UTF7Encoding.cs
- MobileUITypeEditor.cs
- WpfXamlType.cs
- DesignerActionListCollection.cs
- PenThread.cs
- XsdValidatingReader.cs
- Run.cs
- ControlCachePolicy.cs
- TextContainerHelper.cs
- UidManager.cs
- MediaTimeline.cs
- dataprotectionpermissionattribute.cs
- ComboBox.cs
- XPathDocumentIterator.cs
- TextSpan.cs
- DataTemplate.cs
- FontInfo.cs
- BaseComponentEditor.cs
- IFormattable.cs
- ObjectQuery_EntitySqlExtensions.cs
- HttpListenerRequestUriBuilder.cs
- CodeExpressionCollection.cs
- TextFormatterContext.cs
- LinkClickEvent.cs