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
- XmlEncoding.cs
- BinaryMessageEncodingBindingElement.cs
- DBAsyncResult.cs
- EventLog.cs
- SqlDataSourceEnumerator.cs
- ResourceDictionary.cs
- X509ImageLogo.cs
- TrackingMemoryStreamFactory.cs
- PeerNeighborManager.cs
- ValidatorUtils.cs
- DisposableCollectionWrapper.cs
- InvokeMethodDesigner.xaml.cs
- PreloadedPackages.cs
- MatchingStyle.cs
- WebPartConnectionsCancelVerb.cs
- StdValidatorsAndConverters.cs
- IsolationInterop.cs
- SettingsAttributes.cs
- TabControlToolboxItem.cs
- ThicknessAnimation.cs
- RetrieveVirtualItemEventArgs.cs
- DrawingBrush.cs
- DesignerWebPartChrome.cs
- SecurityContext.cs
- TimeoutException.cs
- EpmContentDeSerializerBase.cs
- WindowsSysHeader.cs
- ConstraintEnumerator.cs
- ConfigXmlComment.cs
- WorkflowExecutor.cs
- SharedStatics.cs
- MemberJoinTreeNode.cs
- DynamicEndpoint.cs
- WebPartConnectionsCancelEventArgs.cs
- wpf-etw.cs
- StylusDownEventArgs.cs
- DependencyProperty.cs
- ThicknessAnimationBase.cs
- ButtonStandardAdapter.cs
- login.cs
- Constants.cs
- DataGridTextBoxColumn.cs
- ConvertersCollection.cs
- versioninfo.cs
- UIElementHelper.cs
- DateTimeOffsetStorage.cs
- XslException.cs
- ContextMenu.cs
- ByteStack.cs
- RouteItem.cs
- ToolStripDesignerAvailabilityAttribute.cs
- CollectionEditVerbManager.cs
- BitmapCodecInfo.cs
- PassportAuthenticationModule.cs
- Label.cs
- DeviceContext2.cs
- InternalResources.cs
- Timeline.cs
- SQLDouble.cs
- ToolstripProfessionalRenderer.cs
- MessageBox.cs
- RemoteDebugger.cs
- Attributes.cs
- Ipv6Element.cs
- CustomValidator.cs
- PersonalizableAttribute.cs
- UriTemplateTable.cs
- IFlowDocumentViewer.cs
- ApplicationBuildProvider.cs
- DataControlButton.cs
- CodeTypeParameter.cs
- PathGeometry.cs
- RelativeSource.cs
- TextEffectResolver.cs
- SmtpNegotiateAuthenticationModule.cs
- BasicViewGenerator.cs
- DecoderBestFitFallback.cs
- FlowDocumentPage.cs
- Blend.cs
- SqlProfileProvider.cs
- UrlParameterReader.cs
- XamlSerializerUtil.cs
- assertwrapper.cs
- isolationinterop.cs
- StretchValidation.cs
- WindowInteractionStateTracker.cs
- ToolZone.cs
- EvidenceBase.cs
- ContextMenuStripGroup.cs
- ParentControlDesigner.cs
- EntityCommandDefinition.cs
- InvalidCastException.cs
- SqlUtil.cs
- QilPatternFactory.cs
- ResourceProviderFactory.cs
- QuaternionConverter.cs
- SetStoryboardSpeedRatio.cs
- AxisAngleRotation3D.cs
- Visual3D.cs
- ReceiveSecurityHeaderEntry.cs