Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Expressions / NewArray.cs / 1305376 / NewArray.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.Activities.Expressions { using System.Activities; using System.Collections.ObjectModel; using System.Reflection; using System.Runtime.Collections; using System.Windows.Markup; [ContentProperty("Bounds")] public sealed class NewArray: CodeActivity { Collection bounds; ConstructorInfo constructorInfo; public Collection Bounds { get { if (this.bounds == null) { this.bounds = new ValidatingCollection { // disallow null values OnAddValidationCallback = item => { if (item == null) { throw FxTrace.Exception.ArgumentNull("item"); } } }; } return this.bounds; } } protected override void CacheMetadata(CodeActivityMetadata metadata) { if (!typeof(TResult).IsArray) { metadata.AddValidationError(SR.NewArrayRequiresArrayTypeAsResultType); // We shortcut any further processing in this case. return; } bool foundError = false; // Loop through each argument, validate it, and if validation // passed expose it to the metadata Type[] types = new Type[this.Bounds.Count]; for (int i = 0; i < this.Bounds.Count; i++) { Argument argument = this.Bounds[i]; if (argument == null || argument.IsEmpty) { metadata.AddValidationError(SR.ArgumentRequired("Bounds", typeof(NewArray ))); foundError = true; } else { if (!isIntegralType(argument.ArgumentType)) { metadata.AddValidationError(SR.NewArrayBoundsRequiresIntegralArguments); foundError = true; } else { RuntimeArgument runtimeArgument = new RuntimeArgument("Argument" + i, this.Bounds[i].ArgumentType, this.bounds[i].Direction, true); metadata.Bind(this.Bounds[i], runtimeArgument); metadata.AddArgument(runtimeArgument); types[i] = argument.ArgumentType; } } } // If we didn't find any errors in the arguments then // we can look for an appropriate constructor. if (!foundError) { this.constructorInfo = typeof(TResult).GetConstructor(types); if (this.constructorInfo == null) { metadata.AddValidationError(SR.ConstructorInfoNotFound(typeof(TResult).Name)); } } } protected override TResult Execute(CodeActivityContext context) { object[] objects = new object[this.Bounds.Count]; int i = 0; foreach (Argument argument in this.Bounds) { objects[i] = argument.Get(context); i++; } TResult result = (TResult)this.constructorInfo.Invoke(objects); return result; } bool isIntegralType(Type type) { if (type == typeof(sbyte) || type == typeof(byte) || type == typeof(char) || type == typeof(short) || type == typeof(ushort) || type == typeof(int) || type == typeof(uint) || type == typeof(long) || type == typeof(ulong)) { return true; } else { return false; } } } } // 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
- DataFieldEditor.cs
- MatcherBuilder.cs
- ValueQuery.cs
- SpecialNameAttribute.cs
- InternalConfirm.cs
- DataSourceXmlSerializer.cs
- OAVariantLib.cs
- HtmlSelect.cs
- CornerRadius.cs
- DataBindingCollection.cs
- EntitySetBaseCollection.cs
- SqlUserDefinedTypeAttribute.cs
- XmlSchemaElement.cs
- jithelpers.cs
- Label.cs
- xsdvalidator.cs
- Exceptions.cs
- versioninfo.cs
- KeyNotFoundException.cs
- SystemTcpStatistics.cs
- DbConnectionHelper.cs
- PerformanceCounterLib.cs
- Debugger.cs
- TreeIterator.cs
- UriParserTemplates.cs
- DetailsViewRow.cs
- MergeFailedEvent.cs
- InternalPolicyElement.cs
- FamilyTypefaceCollection.cs
- HttpWebRequest.cs
- InternalPolicyElement.cs
- TiffBitmapEncoder.cs
- CellRelation.cs
- TextElementAutomationPeer.cs
- UseAttributeSetsAction.cs
- BatchParser.cs
- IntegrationExceptionEventArgs.cs
- SqlPersonalizationProvider.cs
- XmlEventCache.cs
- RuntimeConfigLKG.cs
- XmlHierarchicalDataSourceView.cs
- _DisconnectOverlappedAsyncResult.cs
- x509utils.cs
- PropertyBuilder.cs
- ExtendedProperty.cs
- GridViewUpdatedEventArgs.cs
- HeaderElement.cs
- SqlFacetAttribute.cs
- ExpressionPrinter.cs
- Viewport2DVisual3D.cs
- DSASignatureDeformatter.cs
- ComponentCommands.cs
- WebBrowserNavigatedEventHandler.cs
- XmlSchemaSimpleTypeRestriction.cs
- Fonts.cs
- BindingGroup.cs
- FixedElement.cs
- PhysicalOps.cs
- StorageComplexTypeMapping.cs
- SynchronousSendBindingElement.cs
- WebUtil.cs
- DebugHandleTracker.cs
- OdbcConnectionOpen.cs
- TdsParser.cs
- HttpCapabilitiesSectionHandler.cs
- TagMapCollection.cs
- HtmlInputRadioButton.cs
- PtsContext.cs
- BooleanSwitch.cs
- PropertyInfoSet.cs
- SQLRoleProvider.cs
- AmbientLight.cs
- ErrorStyle.cs
- XmlDocumentSchema.cs
- InternalRelationshipCollection.cs
- TypeSystemProvider.cs
- OutOfProcStateClientManager.cs
- CreateRefExpr.cs
- HttpInputStream.cs
- TableLayoutStyleCollection.cs
- FloaterParaClient.cs
- WebPartConnection.cs
- ConfigurationSectionGroupCollection.cs
- SimpleLine.cs
- sqlmetadatafactory.cs
- MouseEventArgs.cs
- CompatibleComparer.cs
- DesignerDataColumn.cs
- BasicExpandProvider.cs
- webproxy.cs
- FormViewCommandEventArgs.cs
- HandleCollector.cs
- DiscreteKeyFrames.cs
- PtsHost.cs
- FunctionImportMapping.cs
- _Rfc2616CacheValidators.cs
- PersonalizableAttribute.cs
- DataPagerFieldCommandEventArgs.cs
- Parser.cs
- XmlHierarchicalDataSourceView.cs