// Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. #if !NET_4_6 using System.Dynamic.Utils; using LinqInternal.Core; namespace System.Linq.Expressions.Reimplement { #if NET20 || NET30 || NET35 || !NET_4_6 /// /// Used to denote the target of a . /// public sealed class LabelTarget { private readonly Type _type; private readonly string _name; internal LabelTarget(Type type, string name) { _type = type; _name = name; } /// /// Gets the name of the label. /// /// The label's name is provided for information purposes only. public string Name { get { return _name; } } /// /// The type of value that is passed when jumping to the label /// (or System.Void if no value should be passed). /// public Type Type { get { return _type; } } /// /// Returns a that represents the current . /// /// A that represents the current . public override string ToString() { return string.IsNullOrEmpty(Name) ? "UnamedLabel" : Name; } } #endif #if NET20 || NET30 || !NET_4_6 public partial class Expression { /// /// Creates a representing a label with void type and no name. /// /// The new . public static LabelTarget Label() { return Label(typeof(void), null); } /// /// Creates a representing a label with void type and the given name. /// /// The name of the label. /// The new . public static LabelTarget Label(string name) { return Label(typeof(void), name); } /// /// Creates a representing a label with the given type. /// /// The type of value that is passed when jumping to the label. /// The new . public static LabelTarget Label(Type type) { return Label(type, null); } /// /// Creates a representing a label with the given type and name. /// /// The type of value that is passed when jumping to the label. /// The name of the label. /// The new . public static LabelTarget Label(Type type, string name) { ContractUtils.RequiresNotNull(type, "type"); TypeHelper.ValidateType(type); return new LabelTarget(type, name); } } #endif } #endif