//----------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.Statements { using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Windows.Markup; using System.Diagnostics.CodeAnalysis; using System.Runtime; [SuppressMessage(FxCop.Category.Naming, FxCop.Rule.IdentifiersShouldNotHaveIncorrectSuffix, Justification = "Optimizing for XAML naming.")] [ContentProperty("Collection")] public sealed class ExistsInCollection : CodeActivity { [RequiredArgument] [DefaultValue(null)] public InArgument> Collection { get; set; } [RequiredArgument] [DefaultValue(null)] public InArgument Item { get; set; } //override to no-op because of performance protected override void CacheMetadata(CodeActivityMetadata metadata) { RuntimeArgument collectionArgument = new RuntimeArgument("Collection", typeof(ICollection), ArgumentDirection.In, true); metadata.Bind(this.Collection, collectionArgument); RuntimeArgument itemArgument = new RuntimeArgument("Item", typeof(T), ArgumentDirection.In, true); metadata.Bind(this.Item, itemArgument); metadata.SetArgumentsCollection( new Collection { collectionArgument, itemArgument, }); } protected override bool Execute(CodeActivityContext context) { ICollection collection = this.Collection.Get(context); if (collection == null) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.CollectionActivityRequiresCollection(this.DisplayName))); } T item = this.Item.Get(context); return collection.Contains(item); } } }