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
- WindowsSolidBrush.cs
- ReflectionPermission.cs
- pingexception.cs
- GridEntryCollection.cs
- TraceEventCache.cs
- DictionaryManager.cs
- FacetChecker.cs
- WindowsImpersonationContext.cs
- D3DImage.cs
- TextTreeInsertElementUndoUnit.cs
- HttpApplication.cs
- XmlDesignerDataSourceView.cs
- diagnosticsswitches.cs
- MessageFormatterConverter.cs
- SqlNodeAnnotation.cs
- EnumValAlphaComparer.cs
- XmlSignatureProperties.cs
- TransformGroup.cs
- NonClientArea.cs
- RuleSetDialog.Designer.cs
- PanningMessageFilter.cs
- ListViewHitTestInfo.cs
- OAVariantLib.cs
- DesignerActionService.cs
- PersonalizableTypeEntry.cs
- TimeZone.cs
- CodeSpit.cs
- ContractType.cs
- ResourceContainer.cs
- ContextMarshalException.cs
- InfoCardTrace.cs
- ActiveDocumentEvent.cs
- UnsafeNativeMethods.cs
- TextCharacters.cs
- MessageQueuePermissionEntry.cs
- SafeSystemMetrics.cs
- NumberSubstitution.cs
- UshortList2.cs
- ServiceDescription.cs
- RangeValidator.cs
- MultilineStringConverter.cs
- FileClassifier.cs
- WindowsIPAddress.cs
- HtmlWindowCollection.cs
- ZeroOpNode.cs
- ProcessHostServerConfig.cs
- DateTimeParse.cs
- Journaling.cs
- RandomDelayQueuedSendsAsyncResult.cs
- ScaleTransform.cs
- Monitor.cs
- Region.cs
- GregorianCalendarHelper.cs
- InputLangChangeRequestEvent.cs
- DelegatedStream.cs
- HttpContext.cs
- TemplateBindingExpression.cs
- EditBehavior.cs
- EntityContainerEmitter.cs
- ClientSponsor.cs
- StringUtil.cs
- PageSettings.cs
- SystemIPInterfaceProperties.cs
- HttpWebResponse.cs
- ObjectStateManagerMetadata.cs
- ConfigXmlReader.cs
- NativeRecognizer.cs
- SchemaImporterExtension.cs
- SecUtil.cs
- XmlUrlEditor.cs
- StringAnimationBase.cs
- DataListCommandEventArgs.cs
- cryptoapiTransform.cs
- CheckedListBox.cs
- CompositeScriptReferenceEventArgs.cs
- KeyInfo.cs
- MergePropertyDescriptor.cs
- RadialGradientBrush.cs
- CodeAttributeDeclaration.cs
- SuppressIldasmAttribute.cs
- ClientSideProviderDescription.cs
- CodeGeneratorOptions.cs
- DataBinder.cs
- diagnosticsswitches.cs
- SQLDoubleStorage.cs
- FontWeight.cs
- DeclarativeConditionsCollection.cs
- SolidColorBrush.cs
- PagedDataSource.cs
- GridErrorDlg.cs
- ColorMatrix.cs
- ResourceType.cs
- TextPointerBase.cs
- AxisAngleRotation3D.cs
- TimeZone.cs
- ProofTokenCryptoHandle.cs
- WebConfigurationFileMap.cs
- CorePropertiesFilter.cs
- SqlXml.cs
- MappingException.cs