Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Expressions / Subtract.cs / 1305376 / Subtract.cs
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//---------------------------------------------------------------
namespace System.Activities.Expressions
{
using System.Activities;
using System.Activities.Statements;
using System.Linq.Expressions;
using System.Activities.Validation;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime;
public sealed class Subtract : CodeActivity
{
//Lock is not needed for operationFunction here. The reason is that delegates for a given Subtract 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 Left
{
get;
set;
}
[RequiredArgument]
[DefaultValue(null)]
public InArgument Right
{
get;
set;
}
[DefaultValue(true)]
public bool Checked
{
get { return this.checkedOperation; }
set { this.checkedOperation = value; }
}
protected override void CacheMetadata(CodeActivityMetadata metadata)
{
BinaryExpressionHelper.OnGetArguments(metadata, this.Left, this.Right);
if (this.checkedOperation)
{
EnsureOperationFunction(metadata, ref checkedOperationFunction, ExpressionType.SubtractChecked);
}
else
{
EnsureOperationFunction(metadata, ref uncheckedOperationFunction, ExpressionType.Subtract);
}
}
void EnsureOperationFunction(CodeActivityMetadata metadata,
ref Func operationFunction,
ExpressionType operatorType)
{
if (operationFunction == null)
{
ValidationError validationError;
if (!BinaryExpressionHelper.TryGenerateLinqDelegate(
operatorType,
out operationFunction,
out validationError))
{
metadata.AddValidationError(validationError);
}
}
}
protected override TResult Execute(CodeActivityContext context)
{
TLeft leftValue = this.Left.Get(context);
TRight rightValue = this.Right.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(leftValue, rightValue);
}
else
{
return uncheckedOperationFunction(leftValue, rightValue);
}
}
}
}
// 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
- OptimizedTemplateContentHelper.cs
- NativeMethods.cs
- LinkedResourceCollection.cs
- InternalBase.cs
- WindowsToolbarAsMenu.cs
- PathFigureCollectionValueSerializer.cs
- Comparer.cs
- QueryResult.cs
- ComponentRenameEvent.cs
- util.cs
- namescope.cs
- X509CertificateStore.cs
- AttributeData.cs
- NonClientArea.cs
- BindingWorker.cs
- DataRowChangeEvent.cs
- TextLineResult.cs
- ConnectivityStatus.cs
- FamilyTypeface.cs
- ColorAnimationUsingKeyFrames.cs
- EllipseGeometry.cs
- ObsoleteAttribute.cs
- HttpServerVarsCollection.cs
- NullableBoolConverter.cs
- FixedSOMFixedBlock.cs
- DbDataSourceEnumerator.cs
- WinOEToolBoxItem.cs
- SqlFlattener.cs
- ConcurrencyBehavior.cs
- MailWriter.cs
- XPathEmptyIterator.cs
- PageFunction.cs
- NameNode.cs
- UrlPath.cs
- WindowsTab.cs
- SerializeAbsoluteContext.cs
- Matrix.cs
- PageThemeBuildProvider.cs
- hresults.cs
- BamlLocalizabilityResolver.cs
- Maps.cs
- RoutedEventValueSerializer.cs
- Polyline.cs
- Setter.cs
- MsmqIntegrationChannelFactory.cs
- GifBitmapEncoder.cs
- ProfileModule.cs
- Metafile.cs
- QilValidationVisitor.cs
- LocalIdKeyIdentifierClause.cs
- ControlParameter.cs
- unsafenativemethodsother.cs
- WinEventTracker.cs
- MessagePropertyDescription.cs
- ReaderWriterLock.cs
- WindowsTokenRoleProvider.cs
- MenuStrip.cs
- FileDetails.cs
- IndicCharClassifier.cs
- AxHost.cs
- Logging.cs
- GorillaCodec.cs
- ListArgumentProvider.cs
- SchemaImporter.cs
- ProviderConnectionPointCollection.cs
- PointCollection.cs
- SmiSettersStream.cs
- ScrollChangedEventArgs.cs
- ExceptionUtil.cs
- DesignerTransactionCloseEvent.cs
- FunctionDescription.cs
- SettingsBindableAttribute.cs
- TransformPatternIdentifiers.cs
- ValueQuery.cs
- TypefaceCollection.cs
- WebSysDefaultValueAttribute.cs
- MenuTracker.cs
- AnnotationMap.cs
- KeyboardEventArgs.cs
- DecimalAnimation.cs
- ContractTypeNameElement.cs
- Script.cs
- BlurEffect.cs
- LinkClickEvent.cs
- RequestCacheValidator.cs
- EdmComplexTypeAttribute.cs
- Rijndael.cs
- ReplacementText.cs
- SqlRewriteScalarSubqueries.cs
- VerificationException.cs
- XmlSchemaFacet.cs
- _NegotiateClient.cs
- ManualResetEventSlim.cs
- StringBuilder.cs
- MultilineStringConverter.cs
- CustomAttributeFormatException.cs
- MethodRental.cs
- NameObjectCollectionBase.cs
- FixedDocument.cs
- HMACSHA512.cs