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
![Network programming in C#, Network Programming in VB.NET, Network Programming in .NET](/images/book.jpg)
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CompilerTypeWithParams.cs
- InputProviderSite.cs
- ToolStripStatusLabel.cs
- Facet.cs
- DocumentSchemaValidator.cs
- SmtpNegotiateAuthenticationModule.cs
- basecomparevalidator.cs
- _Semaphore.cs
- WindowsStatusBar.cs
- DispatcherOperation.cs
- ObjectFullSpanRewriter.cs
- BookmarkCallbackWrapper.cs
- StyleCollection.cs
- CoreSwitches.cs
- SmiRequestExecutor.cs
- SafeRightsManagementHandle.cs
- SmtpReplyReaderFactory.cs
- SpellerStatusTable.cs
- ConfigurationManagerInternal.cs
- SafeArrayRankMismatchException.cs
- XPathNodeList.cs
- ClaimTypes.cs
- AnimationException.cs
- ResXResourceSet.cs
- AuthorizationSection.cs
- DefaultValueTypeConverter.cs
- SHA512.cs
- Fonts.cs
- DataGridViewColumnTypeEditor.cs
- DocobjHost.cs
- Rect3DValueSerializer.cs
- ConnectionManagementElementCollection.cs
- SqlClientWrapperSmiStream.cs
- HelpEvent.cs
- IncomingWebResponseContext.cs
- CanonicalXml.cs
- ClientRoleProvider.cs
- EventDescriptor.cs
- SecondaryIndexDefinition.cs
- DataRowCollection.cs
- DefaultTextStore.cs
- LabelEditEvent.cs
- AppDomainUnloadedException.cs
- WsatStrings.cs
- DataColumnMapping.cs
- BindableAttribute.cs
- XmlKeywords.cs
- EmptyReadOnlyDictionaryInternal.cs
- AbstractExpressions.cs
- StylusSystemGestureEventArgs.cs
- AdvancedBindingEditor.cs
- RectangleConverter.cs
- DataGridComponentEditor.cs
- PerformanceCounterScope.cs
- CompositeTypefaceMetrics.cs
- DataGridItem.cs
- WebPartDescriptionCollection.cs
- FontWeights.cs
- ApplicationProxyInternal.cs
- QueueProcessor.cs
- FontStyles.cs
- Crypto.cs
- TabControlAutomationPeer.cs
- XmlSchemaChoice.cs
- ProtocolsSection.cs
- StructuralType.cs
- BinaryObjectInfo.cs
- CheckBoxField.cs
- ScriptingAuthenticationServiceSection.cs
- ConfigurationValue.cs
- TextureBrush.cs
- RuntimeVariableList.cs
- ComboBoxAutomationPeer.cs
- Unit.cs
- _Rfc2616CacheValidators.cs
- ObjectSet.cs
- QuaternionAnimation.cs
- JobDuplex.cs
- InitializationEventAttribute.cs
- ControllableStoryboardAction.cs
- Substitution.cs
- ToolStripStatusLabel.cs
- ComboBox.cs
- Utils.cs
- SmiMetaDataProperty.cs
- Receive.cs
- ToolStripSettings.cs
- Parallel.cs
- ProgressBar.cs
- WindowsScrollBarBits.cs
- FontConverter.cs
- UInt16.cs
- KnownBoxes.cs
- DomNameTable.cs
- TransactionScope.cs
- SizeAnimationClockResource.cs
- RegexTree.cs
- ThrowHelper.cs
- RTLAwareMessageBox.cs
- DateTimeOffset.cs