Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.Activities / System / Activities / Expressions / Literal.cs / 1305376 / Literal.cs
//------------------------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.Expressions { using System; using System.Activities.ExpressionParser; using System.Activities.XamlIntegration; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; using System.Linq.Expressions; using System.Runtime; using System.Text.RegularExpressions; using System.Windows.Markup; [ContentProperty("Value")] public sealed class Literal: CodeActivity , IExpressionContainer, IValueSerializableExpression { static Regex ExpressionEscapeRegex = new Regex(@"^(%*\[)"); public Literal() { } public Literal(T value) : this() { this.Value = value; } public T Value { get; set; } Expression IExpressionContainer.Expression { get { return Expression.Lambda >(Expression.Constant(this.Value, typeof(T)), ExpressionUtilities.RuntimeContextParameter); } } protected override void CacheMetadata(CodeActivityMetadata metadata) { Type literalType = typeof(T); if (!literalType.IsValueType && literalType != TypeHelper.StringType) { metadata.AddValidationError(SR.LiteralsMustBeValueTypesOrImmutableTypes(TypeHelper.StringType, literalType)); } } protected override T Execute(CodeActivityContext context) { return ExecuteWithTryGetValue(context); } internal override bool TryGetValue(ActivityContext context, out T value) { value = this.Value; return true; } public override string ToString() { return this.Value == null ? "null" : this.Value.ToString(); } public bool CanConvertToString(IValueSerializerContext context) { Type typeArgument; Type valueType; TypeConverter converter; if (this.Value == null) { return true; } typeArgument = typeof(T); valueType = this.Value.GetType(); if (valueType == TypeHelper.StringType) { string myValue = this.Value as string; if (string.IsNullOrEmpty(myValue)) { return false; } } converter = TypeDescriptor.GetConverter(typeArgument); if (typeArgument == valueType && converter != null && converter.CanConvertTo(TypeHelper.StringType) && converter.CanConvertFrom(TypeHelper.StringType)) { return true; } return false; } [SuppressMessage(FxCop.Category.Globalization, FxCop.Rule.SpecifyIFormatProvider, Justification = "we really do want the string as-is")] public string ConvertToString(IValueSerializerContext context) { Type typeArgument; Type valueType; TypeConverter converter; if (this.Value == null) { return "[Nothing]"; } typeArgument = typeof(T); valueType = this.Value.GetType(); converter = TypeDescriptor.GetConverter(typeArgument); Fx.Assert(typeArgument == valueType && converter != null && converter.CanConvertTo(TypeHelper.StringType) && converter.CanConvertFrom(TypeHelper.StringType), "Literal target type T and the return type mismatch or something wrong with its typeConverter!"); // handle a Literal of "[...]" by inserting escape chararcter '%' at the front if (typeArgument == TypeHelper.StringType) { string originalString = Convert.ToString(this.Value); if (originalString.EndsWith("]", StringComparison.Ordinal) && ExpressionEscapeRegex.IsMatch(originalString)) { return "%" + originalString; } } return converter.ConvertToString(context, this.Value); } [EditorBrowsable(EditorBrowsableState.Never)] public bool ShouldSerializeValue() { return !object.Equals(this.Value, default(T)); } } } // 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
- RuleSettings.cs
- XmlDataFileEditor.cs
- objectquery_tresulttype.cs
- FamilyMapCollection.cs
- DesignerActionPropertyItem.cs
- DataBinding.cs
- DLinqColumnProvider.cs
- MarkedHighlightComponent.cs
- AmbientValueAttribute.cs
- DummyDataSource.cs
- SmiGettersStream.cs
- ProcessHostServerConfig.cs
- Action.cs
- ListItem.cs
- EmbeddedMailObjectCollectionEditor.cs
- BuildDependencySet.cs
- MetadataSource.cs
- ThumbAutomationPeer.cs
- TripleDES.cs
- GacUtil.cs
- MetabaseSettings.cs
- UndoManager.cs
- PersonalizationState.cs
- arc.cs
- HotSpotCollection.cs
- DataBindEngine.cs
- PointConverter.cs
- FrameworkRichTextComposition.cs
- NameValueCache.cs
- MessageFilterException.cs
- ObjectSet.cs
- XmlSerializerOperationBehavior.cs
- HtmlTableRowCollection.cs
- DispatcherExceptionEventArgs.cs
- Rule.cs
- SecurityImpersonationBehavior.cs
- QilCloneVisitor.cs
- InfoCardRSAOAEPKeyExchangeDeformatter.cs
- XmlComment.cs
- TextBoxView.cs
- QueryCreatedEventArgs.cs
- MetadataProperty.cs
- ControlCollection.cs
- UpdateManifestForBrowserApplication.cs
- ResourceReader.cs
- RemotingConfigParser.cs
- InfoCardRSAPKCS1SignatureFormatter.cs
- HtmlSelectionListAdapter.cs
- ListViewPagedDataSource.cs
- Message.cs
- PermissionToken.cs
- __FastResourceComparer.cs
- ToolTipService.cs
- TypeExtensionConverter.cs
- ScrollChrome.cs
- UnorderedHashRepartitionStream.cs
- ReadOnlyState.cs
- EncodingTable.cs
- CursorConverter.cs
- UnmanagedMemoryAccessor.cs
- WebPartsPersonalizationAuthorization.cs
- DefaultHttpHandler.cs
- PagerSettings.cs
- CompositeActivityCodeGenerator.cs
- EntityParameterCollection.cs
- ACL.cs
- InputMethodStateTypeInfo.cs
- OciHandle.cs
- CompositeFontParser.cs
- DispatchWrapper.cs
- CompilerGlobalScopeAttribute.cs
- ZipArchive.cs
- FieldInfo.cs
- CustomUserNameSecurityTokenAuthenticator.cs
- MatrixStack.cs
- CustomCredentialPolicy.cs
- IisHelper.cs
- MetabaseSettings.cs
- ProfileProvider.cs
- TerminatorSinks.cs
- CfgRule.cs
- SystemGatewayIPAddressInformation.cs
- AssemblyName.cs
- XmlSchemaIdentityConstraint.cs
- SwitchCase.cs
- InstanceStore.cs
- BitmapEffectInputConnector.cs
- DateTimeStorage.cs
- HtmlInputReset.cs
- AddInIpcChannel.cs
- XhtmlConformanceSection.cs
- Thickness.cs
- NameSpaceEvent.cs
- WinInet.cs
- NotifyIcon.cs
- ThicknessKeyFrameCollection.cs
- ContainerActivationHelper.cs
- ViewPort3D.cs
- PackageDigitalSignatureManager.cs
- StringUtil.cs