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
- RenderCapability.cs
- XPathNodeHelper.cs
- QilTargetType.cs
- NavigationFailedEventArgs.cs
- XsdDateTime.cs
- SqlDataRecord.cs
- XsltArgumentList.cs
- CategoryGridEntry.cs
- Configuration.cs
- PrimaryKeyTypeConverter.cs
- EvidenceTypeDescriptor.cs
- Internal.cs
- XamlParser.cs
- XmlAttributeCollection.cs
- PrincipalPermission.cs
- EncoderReplacementFallback.cs
- SqlProcedureAttribute.cs
- SqlConnectionPoolProviderInfo.cs
- DelegatingConfigHost.cs
- SiteMapPath.cs
- X509Utils.cs
- WorkflowMessageEventArgs.cs
- Int64KeyFrameCollection.cs
- ServiceInstallComponent.cs
- CustomAttribute.cs
- ReverseInheritProperty.cs
- PeerName.cs
- ColumnMapTranslator.cs
- SiteMapProvider.cs
- PeerNameRecordCollection.cs
- ping.cs
- ToolStripPanelRow.cs
- XmlNamespaceMapping.cs
- SelectionRange.cs
- FixedSOMPageElement.cs
- StickyNoteAnnotations.cs
- CommonXSendMessage.cs
- ConfigurationManagerInternalFactory.cs
- AuthenticationManager.cs
- ConfigXmlAttribute.cs
- KeysConverter.cs
- DiagnosticTraceSource.cs
- Misc.cs
- HwndProxyElementProvider.cs
- DynamicValueConverter.cs
- SafeFileMapViewHandle.cs
- ControlDesigner.cs
- StateMachineWorkflowDesigner.cs
- EventDescriptorCollection.cs
- CultureSpecificStringDictionary.cs
- Timer.cs
- SqlNotificationRequest.cs
- CodeBinaryOperatorExpression.cs
- CookielessHelper.cs
- UdpUtility.cs
- DependencyPropertyHelper.cs
- Tile.cs
- ComponentConverter.cs
- PropertyConverter.cs
- BinaryOperationBinder.cs
- BaseCollection.cs
- FixUp.cs
- HtmlInputText.cs
- XmlIgnoreAttribute.cs
- CompareInfo.cs
- Errors.cs
- MenuItemBinding.cs
- GenericEnumConverter.cs
- TraceSection.cs
- SecureConversationVersion.cs
- BamlRecords.cs
- TimeEnumHelper.cs
- CommandLibraryHelper.cs
- AppDomainFactory.cs
- MethodRental.cs
- AsyncCompletedEventArgs.cs
- WindowsRegion.cs
- RemotingSurrogateSelector.cs
- RtfControls.cs
- DynamicObject.cs
- RegexStringValidatorAttribute.cs
- LicenseContext.cs
- ConsoleCancelEventArgs.cs
- SqlUserDefinedTypeAttribute.cs
- AppSettings.cs
- LinkButton.cs
- TextDecoration.cs
- LogLogRecordEnumerator.cs
- __TransparentProxy.cs
- Identity.cs
- RequestQueryProcessor.cs
- AudioFormatConverter.cs
- MetricEntry.cs
- Rule.cs
- ServicePerformanceCounters.cs
- LinkedResourceCollection.cs
- sortedlist.cs
- CompoundFileIOPermission.cs
- View.cs
- EventKeyword.cs