Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Expressions / MultidimensionalArrayItemReference.cs / 1305376 / MultidimensionalArrayItemReference.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.Expressions { using System.Collections.ObjectModel; using System.ComponentModel; using System.Runtime; using System.Runtime.Collections; using System.Runtime.Serialization; using System.Windows.Markup; [ContentProperty("Indices")] public sealed class MultidimensionalArrayItemReference: CodeActivity > { Collection > indices; [RequiredArgument] [DefaultValue(null)] public InArgument Array { get; set; } [DefaultValue(null)] public Collection > Indices { get { if (this.indices == null) { this.indices = new ValidatingCollection > { // disallow null values OnAddValidationCallback = item => { if (item == null) { throw FxTrace.Exception.ArgumentNull("item"); } }, }; } return this.indices; } } protected override void CacheMetadata(CodeActivityMetadata metadata) { if (this.Indices.Count == 0) { metadata.AddValidationError(SR.IndicesAreNeeded(this.GetType().Name, this.DisplayName)); } RuntimeArgument arrayArgument = new RuntimeArgument("Array", typeof(Array), ArgumentDirection.In, true); metadata.Bind(this.Array, arrayArgument); metadata.AddArgument(arrayArgument); for (int i = 0; i < this.Indices.Count; i++) { RuntimeArgument indexArgument = new RuntimeArgument("Index_" + i, typeof(int), ArgumentDirection.In, true); metadata.Bind(this.Indices[i], indexArgument); metadata.AddArgument(indexArgument); } RuntimeArgument resultArgument = new RuntimeArgument("Result", typeof(Location ), ArgumentDirection.Out); metadata.Bind(this.Result, resultArgument); metadata.AddArgument(resultArgument); } protected override Location Execute(CodeActivityContext context) { Array items = this.Array.Get(context); if (items == null) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.MemberCannotBeNull("Array", this.GetType().Name, this.DisplayName))); } Type realItemType = items.GetType().GetElementType(); if (!TypeHelper.AreTypesCompatible(typeof(TItem), realItemType)) { throw FxTrace.Exception.AsError(new InvalidCastException(SR.IncompatibleTypeForMultidimensionalArrayItemReference(typeof(TItem).Name, realItemType.Name))); } int[] itemIndex = new int[this.Indices.Count]; for (int i = 0; i < this.Indices.Count; i++) { itemIndex[i] = this.Indices[i].Get(context); } return new MultidimensionArrayLocation(items, itemIndex); } [DataContract] class MultidimensionArrayLocation : Location { [DataMember] Array array; [DataMember(EmitDefaultValue = false)] int[] indices; public MultidimensionArrayLocation(Array array, int[] indices) : base() { this.array = array; this.indices = indices; } public override TItem Value { get { return (TItem)this.array.GetValue(indices); } set { this.array.SetValue(value, indices); } } } } } // 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
- RecipientInfo.cs
- StubHelpers.cs
- PerfProviderCollection.cs
- VirtualizingPanel.cs
- _BaseOverlappedAsyncResult.cs
- HashHelper.cs
- XamlContextStack.cs
- PageVisual.cs
- RequestStatusBarUpdateEventArgs.cs
- HttpRequestBase.cs
- TransformValueSerializer.cs
- SoapSchemaImporter.cs
- CodeTypeDeclarationCollection.cs
- IgnorePropertiesAttribute.cs
- MessageSecurityOverTcpElement.cs
- DataGridClipboardCellContent.cs
- Privilege.cs
- MetadataUtil.cs
- ResourcePermissionBaseEntry.cs
- ScrollBarRenderer.cs
- XmlSchemaSequence.cs
- ImageKeyConverter.cs
- ThaiBuddhistCalendar.cs
- FixedSOMGroup.cs
- DataSourceSelectArguments.cs
- AsymmetricSignatureFormatter.cs
- MembershipValidatePasswordEventArgs.cs
- LineMetrics.cs
- SerializationSectionGroup.cs
- Queue.cs
- UpdateException.cs
- UidManager.cs
- MatrixKeyFrameCollection.cs
- SymLanguageVendor.cs
- RbTree.cs
- _SpnDictionary.cs
- BoundingRectTracker.cs
- SiteMapPath.cs
- WindowsSpinner.cs
- ProxyGenerator.cs
- PathSegment.cs
- SystemBrushes.cs
- ElementHostPropertyMap.cs
- ObjectHandle.cs
- Evaluator.cs
- PropertiesTab.cs
- DbCommandTree.cs
- PermissionRequestEvidence.cs
- CodeAccessSecurityEngine.cs
- TaiwanCalendar.cs
- securitycriticaldataClass.cs
- CompositeDataBoundControl.cs
- MenuStrip.cs
- ExpandoObject.cs
- smtpconnection.cs
- CreateParams.cs
- BridgeDataReader.cs
- AnimationTimeline.cs
- TreeChangeInfo.cs
- HttpRuntime.cs
- CriticalFinalizerObject.cs
- NamedPipeTransportBindingElement.cs
- BamlRecordWriter.cs
- ControlBindingsCollection.cs
- VariableQuery.cs
- Privilege.cs
- MethodInfo.cs
- RoleManagerEventArgs.cs
- DeflateInput.cs
- DataStreamFromComStream.cs
- TableChangeProcessor.cs
- EnvelopedPkcs7.cs
- TextBox.cs
- AssemblyBuilder.cs
- ConfigurationSectionGroup.cs
- HttpChannelBindingToken.cs
- recordstate.cs
- SessionPageStatePersister.cs
- SqlClientWrapperSmiStreamChars.cs
- MetadataArtifactLoaderCompositeFile.cs
- ConnectionStringSettings.cs
- RegexCaptureCollection.cs
- EncoderReplacementFallback.cs
- WebSysDefaultValueAttribute.cs
- SplitContainer.cs
- CapiNative.cs
- cookiecollection.cs
- UpdatePanelControlTrigger.cs
- ReadOnlyMetadataCollection.cs
- PriorityItem.cs
- RequestBringIntoViewEventArgs.cs
- BinaryNegotiation.cs
- TextRangeEditLists.cs
- APCustomTypeDescriptor.cs
- ObjectPersistData.cs
- ZipIOCentralDirectoryFileHeader.cs
- XamlSerializerUtil.cs
- Win32NamedPipes.cs
- MetafileHeader.cs
- TargetControlTypeCache.cs