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
- RedirectionProxy.cs
- ExpressionEditor.cs
- ImportContext.cs
- ToolStripDropDownMenu.cs
- EntityContainerRelationshipSetEnd.cs
- FontNamesConverter.cs
- StylusButtonEventArgs.cs
- XmlDataSourceDesigner.cs
- FileDetails.cs
- PropertyToken.cs
- TrustSection.cs
- PictureBox.cs
- DbInsertCommandTree.cs
- URL.cs
- PTManager.cs
- PageThemeParser.cs
- WebServiceResponse.cs
- KoreanLunisolarCalendar.cs
- SapiInterop.cs
- Renderer.cs
- Pkcs9Attribute.cs
- Random.cs
- RecommendedAsConfigurableAttribute.cs
- PageBuildProvider.cs
- CodePropertyReferenceExpression.cs
- DataStorage.cs
- Bold.cs
- UxThemeWrapper.cs
- PropertyEntry.cs
- NativeMethods.cs
- XmlParserContext.cs
- EditingCommands.cs
- Component.cs
- WindowsFormsHostAutomationPeer.cs
- UserControlBuildProvider.cs
- HttpHandlersSection.cs
- HtmlGenericControl.cs
- SharedStatics.cs
- DbSourceCommand.cs
- BindingContext.cs
- RegexCompiler.cs
- FormViewDeleteEventArgs.cs
- MetafileHeader.cs
- XmlImplementation.cs
- RequestContext.cs
- SortedSet.cs
- Point.cs
- UserMapPath.cs
- HtmlTableCell.cs
- XmlMembersMapping.cs
- CreateUserErrorEventArgs.cs
- SiteOfOriginPart.cs
- Converter.cs
- RegisteredDisposeScript.cs
- HTTPNotFoundHandler.cs
- RefExpr.cs
- SafeMemoryMappedViewHandle.cs
- PropertyTabAttribute.cs
- CodeAttachEventStatement.cs
- _AutoWebProxyScriptEngine.cs
- BitmapSourceSafeMILHandle.cs
- HealthMonitoringSectionHelper.cs
- GZipDecoder.cs
- VisualTreeUtils.cs
- FormViewModeEventArgs.cs
- UIElementCollection.cs
- ReadOnlyCollection.cs
- StylusPointPropertyUnit.cs
- RepeaterDataBoundAdapter.cs
- PackageFilter.cs
- FieldNameLookup.cs
- XmlnsDictionary.cs
- DataAccessor.cs
- PropertyPath.cs
- ContractTypeNameElement.cs
- PerformanceCounterManager.cs
- Formatter.cs
- SQLDecimalStorage.cs
- WindowsRegion.cs
- WebPartsPersonalizationAuthorization.cs
- SafeCoTaskMem.cs
- HealthMonitoringSection.cs
- TextRunCacheImp.cs
- WindowsGrip.cs
- AssociationType.cs
- AdornerPresentationContext.cs
- relpropertyhelper.cs
- VerticalAlignConverter.cs
- WaitHandle.cs
- PointIndependentAnimationStorage.cs
- TreeView.cs
- ServiceBusyException.cs
- EntityWrapperFactory.cs
- UrlMappingCollection.cs
- WindowsStatic.cs
- DiscreteKeyFrames.cs
- AnnotationService.cs
- DisplayInformation.cs
- DataSourceView.cs
- GradientBrush.cs