Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ConsoleKeyInfo does not implement IEquatable #2127

Closed
fghzxm opened this issue Jan 24, 2020 · 10 comments
Closed

ConsoleKeyInfo does not implement IEquatable #2127

fghzxm opened this issue Jan 24, 2020 · 10 comments
Assignees
Labels
api-approved API was approved in API review, it can be implemented area-System.Console
Milestone

Comments

@fghzxm
Copy link

fghzxm commented Jan 24, 2020

System.ConsoleKeyInfo does not implement System.IEquatable<System.ConsoleKeyInfo>. Is this intended?

@Dotnet-GitSync-Bot Dotnet-GitSync-Bot added area-System.Console untriaged New issue has not been triaged by the area owner labels Jan 24, 2020
@danmoseley
Copy link
Member

What are you trying to achieve?

@vcsjones
Copy link
Member

vcsjones commented Jan 24, 2020

Well, I think the question is that ConsoleKeyInfo already has all of the implementation to satisfy implementing the IEquatable<ConsoleKeyInfo> interface. It already has bool Equals(ConsoleKeyInfo) implemented.

public bool Equals(ConsoleKeyInfo obj)
{
return obj._keyChar == _keyChar && obj._key == _key && obj._mods == _mods;
}

I think then this is an API proposal:

 namespace System
 {
-    public readonly struct ConsoleKeyInfo
+    public readonly struct ConsoleKeyInfo : IEquatable<ConsoleKeyInfo>
     {

@fghzxm
Copy link
Author

fghzxm commented Jan 29, 2020

What are you trying to achieve?

A common scenario could be implementing a TUI and maintaining a dictionary of ConsoleKeyInfos to hotkey handlers (think of tmux or emacs or anything that allows programmable hotkeys). It is possible to use an equality comparer lambda, but it would be nicer for ConsoleKeyInfo to already implement IEquatable.

@maryamariyan maryamariyan removed the untriaged New issue has not been triaged by the area owner label Mar 3, 2020
@adamsitnik adamsitnik self-assigned this Jun 24, 2020
@adamsitnik adamsitnik added this to the 5.0.0 milestone Jun 24, 2020
@adamsitnik
Copy link
Member

@terrajobst ConsoleKeyInfo implements Equals(object), Equals(ConsoleKeyInfo) and overrides GetHashCode but does not implement the IEquatable<ConsoleKeyInfo> interface. Do I need an API review for:

-public readonly struct ConsoleKeyInfo
+public readonly struct ConsoleKeyInfo : IEquatable<ConsoleKeyInfo>

@jeffhandley it looks like a good candidate for an analyzer (#31996 is another example)

@jeffhandley
Copy link
Member

@adamsitnik Yeah that seems like a cool analyzer idea. Feel free to submit an issue for that and tag it with code-analyzer.

@danmoseley
Copy link
Member

Do I need an API review for

Yes..hopefully quick and easy one though

@stephentoub
Copy link
Member

it looks like a good candidate for an analyzer

It actually already exists: CA1066
https://docs.microsoft.com/en-us/visualstudio/code-quality/ca1066?view=vs-2019

@adamsitnik
Copy link
Member

It actually already exists: CA1066

@stephentoub thanks, I did not know about it!

Is there any reason why it's disabled in this repo?

<Rule Id="CA1066" Action="None" /> <!-- Implement IEquatable when overriding Object.Equals -->

@stephentoub
Copy link
Member

stephentoub commented Jun 30, 2020

Is there any reason why it's disabled in this repo?

Most if not all of the API-focused rules are disabled because they're not actionable on their own: we have a dedicated API review process for any new public APIs, so a developer can't just go in and fix a violation on their own. There are currently dozens of warnings from the rule on public surface area, mostly APIs that have been around for a very long time. If someone did the work to catalogue all of the public APIs that would need to be augmented, run them all through API review, and get all the APIs added, then we could enable the rule, assuming we wanted to enforce it in all public APIs shipped from this repo moving forward.

For reference, when I build locally, these are the warnings I get from it:

D:\repos\runtime\src\libraries\System.Private.CoreLib\src\System\Nullable.cs(17,27): warning CA1066: Type System.Nullable<T> should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
D:\repos\runtime\src\libraries\System.Private.CoreLib\src\System\HashCode.cs(54,19): warning CA1066: Type System.HashCode should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
src\System\Runtime\InteropServices\GCHandle.CoreCLR.cs(12,27): warning CA1066: Type System.Runtime.InteropServices.GCHandle should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
D:\repos\runtime\src\libraries\System.Private.CoreLib\src\System\ArraySegment.cs(29,28): warning CA1066: Type System.ArraySegment<T> should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
D:\repos\runtime\src\libraries\System.Private.CoreLib\src\System\Runtime\Serialization\StreamingContext.cs(7,28): warning CA1066: Type System.Runtime.Serialization.StreamingContext should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
src\System\RuntimeHandles.cs(16,26): warning CA1066: Type System.RuntimeTypeHandle should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
src\System\RuntimeHandles.cs(690,26): warning CA1066: Type System.RuntimeMethodHandle should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
src\System\RuntimeHandles.cs(1014,26): warning CA1066: Type System.RuntimeFieldHandle should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
src\System\RuntimeHandles.cs(1121,26): warning CA1066: Type System.ModuleHandle should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
D:\repos\runtime\src\libraries\System.Private.CoreLib\src\System\Runtime\InteropServices\ArrayWithOffset.cs(9,19): warning CA1066: Type System.Runtime.InteropServices.ArrayWithOffset should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
D:\repos\runtime\src\libraries\System.Private.CoreLib\src\System\Diagnostics\Tracing\EventDescriptor.cs(21,21): warning CA1066: Type System.Diagnostics.Tracing.EventDescriptor should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
src\System\Diagnostics\SymbolStore\Token.cs(15,21): warning CA1066: Type System.Diagnostics.SymbolStore.SymbolToken should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
src\System\Reflection\MdImport.cs(198,30): warning CA1066: Type System.Reflection.MetadataImport should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
src\System\Reflection\CustomAttribute.cs(501,36): warning CA1066: Type System.Reflection.CustomAttributeTypedArgument should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
D:\repos\runtime\src\libraries\System.Private.CoreLib\src\System\Reflection\CustomAttributeNamedArgument.cs(7,36): warning CA1066: Type System.Reflection.CustomAttributeNamedArgument should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
D:\repos\runtime\src\libraries\System.Private.CoreLib\src\System\Threading\CancellationToken.cs(31,28): warning CA1066: Type System.Threading.CancellationToken should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
D:\repos\runtime\src\libraries\System.Private.CoreLib\src\System\Threading\ExecutionContext.cs(575,19): warning CA1066: Type System.Threading.AsyncFlowControl should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
D:\repos\runtime\src\libraries\System.Private.CoreLib\src\System\Reflection\Emit\EventToken.cs(7,19): warning CA1066: Type System.Reflection.Emit.EventToken should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
D:\repos\runtime\src\libraries\System.Private.CoreLib\src\System\Reflection\Emit\FieldToken.cs(13,19): warning CA1066: Type System.Reflection.Emit.FieldToken should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
D:\repos\runtime\src\libraries\System.Private.CoreLib\src\System\Reflection\Emit\MethodToken.cs(7,19): warning CA1066: Type System.Reflection.Emit.MethodToken should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
D:\repos\runtime\src\libraries\System.Private.CoreLib\src\System\Reflection\Emit\ParameterToken.cs(11,19): warning CA1066: Type System.Reflection.Emit.ParameterToken should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
D:\repos\runtime\src\libraries\System.Private.CoreLib\src\System\Reflection\Emit\PropertyToken.cs(7,19): warning CA1066: Type System.Reflection.Emit.PropertyToken should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
D:\repos\runtime\src\libraries\System.Private.CoreLib\src\System\Reflection\Emit\SignatureToken.cs(7,19): warning CA1066: Type System.Reflection.Emit.SignatureToken should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
D:\repos\runtime\src\libraries\System.Private.CoreLib\src\System\Reflection\Emit\StringToken.cs(7,19): warning CA1066: Type System.Reflection.Emit.StringToken should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
D:\repos\runtime\src\libraries\System.Private.CoreLib\src\System\Reflection\Emit\TypeToken.cs(7,19): warning CA1066: Type System.Reflection.Emit.TypeToken should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\coreclr\src\System.Private.CoreLib\System.Private.CoreLib.csproj]
Dependency.cs(10,19): warning CA1066: Type Microsoft.Extensions.DependencyModel.Dependency should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\Microsoft.Extensions.DependencyModel\src\Microsoft.Extensions.DependencyModel.csproj]
EventId.cs(10,28): warning CA1066: Type Microsoft.Extensions.Logging.EventId should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\Microsoft.Extensions.Logging.Abstractions\src\Microsoft.Extensions.Logging.Abstractions.csproj]
System\Collections\Specialized\BitVector32.cs(14,19): warning CA1066: Type System.Collections.Specialized.BitVector32 should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Collections.Specialized\src\System.Collections.Specialized.csproj]
System\Collections\Specialized\BitVector32.cs(230,32): warning CA1066: Type System.Collections.Specialized.BitVector32.Section should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Collections.Specialized\src\System.Collections.Specialized.csproj]
System\Collections\Immutable\ImmutableDictionary_2.HashBucket.cs(19,34): warning CA1066: Type System.Collections.Immutable.ImmutableDictionary<TKey, TValue>.HashBucket should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Collections.Immutable\src\System.Collections.Immutable.csproj]
System\Collections\Immutable\ImmutableHashSet_1.HashBucket.cs(34,34): warning CA1066: Type System.Collections.Immutable.ImmutableHashSet<T>.HashBucket should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Collections.Immutable\src\System.Collections.Immutable.csproj]
System\ComponentModel\Composition\ReflectionModel\LazyMemberInfo.cs(12,19): warning CA1066: Type System.ComponentModel.Composition.ReflectionModel.LazyMemberInfo should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.ComponentModel.Composition\src\System.ComponentModel.Composition.csproj]
System\ConsoleKeyInfo.cs(9,28): warning CA1066: Type System.ConsoleKeyInfo should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Console\src\System.Console.csproj]
System\Diagnostics\CounterSample.cs(10,28): warning CA1066: Type System.Diagnostics.CounterSample should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Diagnostics.PerformanceCounter\src\System.Diagnostics.PerformanceCounter.csproj]
System\Data\DataKey.cs(9,30): warning CA1066: Type System.Data.DataKey should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Data.Common\src\System.Data.Common.csproj]
System\Data\Selection.cs(12,30): warning CA1066: Type System.Data.IndexField should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Data.Common\src\System.Data.Common.csproj]
System\Data\SQLTypes\SQLDateTime.cs(24,19): warning CA1066: Type System.Data.SqlTypes.SqlDateTime should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Data.Common\src\System.Data.Common.csproj]
System\Data\SQLTypes\SQLDouble.cs(22,19): warning CA1066: Type System.Data.SqlTypes.SqlDouble should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Data.Common\src\System.Data.Common.csproj]
System\Data\SQLTypes\SQLInt16.cs(20,19): warning CA1066: Type System.Data.SqlTypes.SqlInt16 should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Data.Common\src\System.Data.Common.csproj]
System\Data\SQLTypes\SQLDecimal.cs(21,19): warning CA1066: Type System.Data.SqlTypes.SqlDecimal should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Data.Common\src\System.Data.Common.csproj]
System\Data\SQLTypes\SQLInt32.cs(20,19): warning CA1066: Type System.Data.SqlTypes.SqlInt32 should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Data.Common\src\System.Data.Common.csproj]
System\Data\SQLTypes\SQLInt64.cs(21,19): warning CA1066: Type System.Data.SqlTypes.SqlInt64 should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Data.Common\src\System.Data.Common.csproj]
System\Data\SQLTypes\SQLSingle.cs(20,19): warning CA1066: Type System.Data.SqlTypes.SqlSingle should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Data.Common\src\System.Data.Common.csproj]
System\Data\SQLTypes\SQLMoney.cs(24,19): warning CA1066: Type System.Data.SqlTypes.SqlMoney should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Data.Common\src\System.Data.Common.csproj]
System\Data\SQLTypes\SQLString.cs(37,19): warning CA1066: Type System.Data.SqlTypes.SqlString should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Data.Common\src\System.Data.Common.csproj]
System\Data\SQLTypes\SQLBinary.cs(15,19): warning CA1066: Type System.Data.SqlTypes.SqlBinary should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Data.Common\src\System.Data.Common.csproj]
System\Data\SQLTypes\SQLByte.cs(21,19): warning CA1066: Type System.Data.SqlTypes.SqlByte should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Data.Common\src\System.Data.Common.csproj]
System\Data\SQLTypes\SQLGuid.cs(19,19): warning CA1066: Type System.Data.SqlTypes.SqlGuid should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Data.Common\src\System.Data.Common.csproj]
System\Data\SQLTypes\SQLBoolean.cs(21,19): warning CA1066: Type System.Data.SqlTypes.SqlBoolean should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Data.Common\src\System.Data.Common.csproj]
System\ComponentModel\InterlockedBitVector32.cs(14,21): warning CA1066: Type System.ComponentModel.InterlockedBitVector32 should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.ComponentModel.TypeConverter\src\System.ComponentModel.TypeConverter.csproj]
System\ComponentModel\Design\Serialization\MemberRelationshipService.cs(150,24): warning CA1066: Type System.ComponentModel.Design.Serialization.MemberRelationshipService.RelationshipEntry should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.ComponentModel.TypeConverter\src\System.ComponentModel.TypeConverter.csproj]
System\ComponentModel\Design\Serialization\MemberRelationshipService.cs(188,28): warning CA1066: Type System.ComponentModel.Design.Serialization.MemberRelationship should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.ComponentModel.TypeConverter\src\System.ComponentModel.TypeConverter.csproj]
System\Drawing\CharacterRange.cs(11,19): warning CA1066: Type System.Drawing.CharacterRange should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Drawing.Common\src\System.Drawing.Common.csproj]
System\Drawing\Printing\TriState.cs(7,38): warning CA1066: Type System.Drawing.Printing.TriState should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Drawing.Common\src\System.Drawing.Common.csproj]
System\Linq\Expressions\Interpreter\LocalVariables.cs(50,30): warning CA1066: Type System.Linq.Expressions.Interpreter.LocalDefinition should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Linq.Expressions\src\System.Linq.Expressions.csproj]
System\Net\Sockets\IPPacketInformation.cs(7,19): warning CA1066: Type System.Net.Sockets.IPPacketInformation should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Net.Sockets\src\System.Net.Sockets.csproj]
System\Runtime\Caching\CacheExpires.cs(17,21): warning CA1066: Type System.Runtime.Caching.ExpiresEntryRef should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Runtime.Caching\src\System.Runtime.Caching.csproj]
System\Runtime\Caching\CacheUsage.cs(17,21): warning CA1066: Type System.Runtime.Caching.UsageEntryRef should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Runtime.Caching\src\System.Runtime.Caching.csproj]
System\Threading\LockCookie.cs(11,19): warning CA1066: Type System.Threading.LockCookie should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Threading\src\System.Threading.csproj]
System\Xml\BinaryXml\XmlBinaryReader.cs(62,25): warning CA1066: Type System.Xml.XmlSqlBinaryReader.QName should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Private.Xml\src\System.Private.Xml.csproj]
System\Xml\Xsl\Pair.cs(10,21): warning CA1066: Type System.Xml.Xsl.Int32Pair should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Private.Xml\src\System.Private.Xml.csproj]
System\Xml\Xsl\XmlQueryCardinality.cs(14,21): warning CA1066: Type System.Xml.Xsl.XmlQueryCardinality should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Private.Xml\src\System.Private.Xml.csproj]
System\Xml\BinaryXml\XmlBinaryReader.cs(62,25): warning CA1066: Type System.Xml.XmlSqlBinaryReader.QName should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Private.Xml\src\System.Private.Xml.csproj]
System\Xml\Xsl\Pair.cs(10,21): warning CA1066: Type System.Xml.Xsl.Int32Pair should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Private.Xml\src\System.Private.Xml.csproj]
System\Xml\Xsl\XmlQueryCardinality.cs(14,21): warning CA1066: Type System.Xml.Xsl.XmlQueryCardinality should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Private.Xml\src\System.Private.Xml.csproj]
System\ServiceProcess\SessionChangeDescription.cs(7,28): warning CA1066: Type System.ServiceProcess.SessionChangeDescription should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.ServiceProcess.ServiceController\src\System.ServiceProcess.ServiceController.csproj]
System\Transactions\TransactionOptions.cs(7,19): warning CA1066: Type System.Transactions.TransactionOptions should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Transactions.Local\src\System.Transactions.Local.csproj]
System\Diagnostics\SymbolStore\SymbolToken.cs(7,28): warning CA1066: Type System.Diagnostics.SymbolStore.SymbolToken should implement IEquatable<T> because it overrides Equals [D:\repos\runtime\src\libraries\System.Diagnostics.StackTrace\src\System.Diagnostics.StackTrace.csproj]

Note that some of these highlight that just because a type overrides Equals doesn't mean it should implement IEquatable. Take Hashcode, for example, which overrides Equals to throw so as to prevent comparison; implementing IEquatable would be a step backwards.

@adamsitnik adamsitnik modified the milestones: 5.0.0, 6.0.0 Jul 6, 2020
@carlossanlop carlossanlop added api-ready-for-review API is ready for review, it is NOT ready for implementation and removed api-ready-for-review labels Jul 6, 2020
@terrajobst terrajobst added api-approved API was approved in API review, it can be implemented and removed api-ready-for-review API is ready for review, it is NOT ready for implementation labels Jul 21, 2020
@terrajobst
Copy link
Member

terrajobst commented Jul 21, 2020

Video

  • Makes sense
namespace System
{
    public partial readonly struct ConsoleKeyInfo : IEquatable<ConsoleKeyInfo>
    {
    }
}

@adamsitnik adamsitnik modified the milestones: 6.0.0, 5.0.0 Aug 11, 2020
@ghost ghost locked as resolved and limited conversation to collaborators Dec 11, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
api-approved API was approved in API review, it can be implemented area-System.Console
Projects
None yet
Development

No branches or pull requests