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
- NumberFormatInfo.cs
- AuthenticationManager.cs
- HitTestParameters.cs
- StringWriter.cs
- SqlConnectionStringBuilder.cs
- DesignerActionListCollection.cs
- DataGridCell.cs
- Route.cs
- Matrix3DConverter.cs
- BaseTemplateParser.cs
- SplitterCancelEvent.cs
- EntityWithKeyStrategy.cs
- WebSysDescriptionAttribute.cs
- WebPartManager.cs
- BufferAllocator.cs
- HelpEvent.cs
- AsyncCompletedEventArgs.cs
- entityreference_tresulttype.cs
- TextServicesPropertyRanges.cs
- DelayedRegex.cs
- BitmapMetadataEnumerator.cs
- XsltOutput.cs
- HttpServerChannel.cs
- TableCellAutomationPeer.cs
- ReflectionServiceProvider.cs
- LabelExpression.cs
- RSAOAEPKeyExchangeDeformatter.cs
- BooleanKeyFrameCollection.cs
- RegisteredArrayDeclaration.cs
- IisTraceWebEventProvider.cs
- RadialGradientBrush.cs
- Row.cs
- StrokeNode.cs
- HyperLink.cs
- SHA256Managed.cs
- _SslState.cs
- HitTestResult.cs
- BinaryFormatterWriter.cs
- DocumentViewerBase.cs
- SkipStoryboardToFill.cs
- EnumerableRowCollection.cs
- TextLine.cs
- SectionUpdates.cs
- ByteStack.cs
- DefaultValidator.cs
- StructuredTypeEmitter.cs
- Clipboard.cs
- MergeFilterQuery.cs
- AttributeQuery.cs
- HttpSocketManager.cs
- EntityChangedParams.cs
- CheckBox.cs
- HttpCacheVaryByContentEncodings.cs
- AttributeQuery.cs
- NonBatchDirectoryCompiler.cs
- AuthenticationConfig.cs
- PropertyChangedEventManager.cs
- Rect3D.cs
- TreeNodeCollectionEditorDialog.cs
- PageBuildProvider.cs
- _NativeSSPI.cs
- AttributeCollection.cs
- IgnoreFileBuildProvider.cs
- TimeStampChecker.cs
- LinqDataSourceValidationException.cs
- Fx.cs
- AutomationIdentifierGuids.cs
- ResourceWriter.cs
- SqlRemoveConstantOrderBy.cs
- ApplicationHost.cs
- ObjectStorage.cs
- SimpleFileLog.cs
- Metadata.cs
- Transform3DGroup.cs
- WindowsTooltip.cs
- FlowDocumentFormatter.cs
- TextEffect.cs
- DisableDpiAwarenessAttribute.cs
- AlternateViewCollection.cs
- PixelFormat.cs
- AuthenticationModuleElement.cs
- WebConfigurationManager.cs
- DataList.cs
- ConfigurationLocationCollection.cs
- WindowsProgressbar.cs
- ControlTemplate.cs
- RSACryptoServiceProvider.cs
- NoneExcludedImageIndexConverter.cs
- XmlDictionaryString.cs
- IntSumAggregationOperator.cs
- XPathScanner.cs
- ObjectDataSourceSelectingEventArgs.cs
- DataGridViewTextBoxColumn.cs
- MsmqHostedTransportConfiguration.cs
- RotateTransform3D.cs
- ServiceProviders.cs
- TabletDeviceInfo.cs
- Part.cs
- AttributeTableBuilder.cs
- SchemaImporterExtension.cs