| File: Workspace\Solution\SolutionId.cs | Web Access |
| Project: src\roslyn\src\Workspaces\Core\Portable\Microsoft.CodeAnalysis.Workspaces.csproj (Microsoft.CodeAnalysis.Workspaces) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. #nullable disable using System; using System.Collections.Generic; using System.Diagnostics; using System.Runtime.Serialization; using Roslyn.Utilities; namespace Microsoft.CodeAnalysis; /// <summary> /// An identifier that can be used to refer to the same Solution across versions. /// </summary> [DebuggerDisplay("{GetDebuggerDisplay(),nq}")] [DataContract] public sealed class SolutionId : IEquatable<SolutionId> { /// <summary> /// The unique id of the solution. /// </summary> [DataMember(Order = 0)] public Guid Id { get; } [DataMember(Order = 1)] internal string DebugName { get; } private SolutionId(Guid id, string debugName) { this.Id = id; DebugName = debugName; } /// <summary> /// Create a new Solution Id /// </summary> /// <param name="debugName">An optional name to make this id easier to recognize while debugging.</param> public static SolutionId CreateNewId(string debugName = null) => CreateFromSerialized(Guid.NewGuid(), debugName); public static SolutionId CreateFromSerialized(Guid id, string debugName = null) { if (id == Guid.Empty) { throw new ArgumentException(nameof(id)); } debugName ??= "unsaved"; return new SolutionId(id, debugName); } private string GetDebuggerDisplay() => string.Format("({0}, #{1} - {2})", GetType().Name, this.Id, DebugName); public override bool Equals(object obj) => this.Equals(obj as SolutionId); public bool Equals(SolutionId other) { return other is object && this.Id == other.Id; } public static bool operator ==(SolutionId left, SolutionId right) => EqualityComparer<SolutionId>.Default.Equals(left, right); public static bool operator !=(SolutionId left, SolutionId right) => !(left == right); public override int GetHashCode() => this.Id.GetHashCode(); internal void WriteTo(ObjectWriter writer) { writer.WriteGuid(Id); writer.WriteString(DebugName); } internal static SolutionId ReadFrom(ObjectReader reader) { var guid = reader.ReadGuid(); var debugName = reader.ReadString(); return CreateFromSerialized(guid, debugName); } }