{"action":"created","issue":{"url":"https://api.github.com/repos/dotnet/corefx/issues/32878","repository_url":"https://api.github.com/repos/dotnet/corefx","labels_url":"https://api.github.com/repos/dotnet/corefx/issues/32878/labels{/name}","comments_url":"https://api.github.com/repos/dotnet/corefx/issues/32878/comments","events_url":"https://api.github.com/repos/dotnet/corefx/issues/32878/events","html_url":"https://github.com/dotnet/corefx/issues/32878","id":371314812,"node_id":"MDU6SXNzdWUzNzEzMTQ4MTI=","number":32878,"title":"Would like IEnumerable.None as part of the standard.","user":{"login":"terrajobst","id":5169960,"node_id":"MDQ6VXNlcjUxNjk5NjA=","avatar_url":"https://avatars0.githubusercontent.com/u/5169960?v=4","gravatar_id":"","url":"https://api.github.com/users/terrajobst","html_url":"https://github.com/terrajobst","followers_url":"https://api.github.com/users/terrajobst/followers","following_url":"https://api.github.com/users/terrajobst/following{/other_user}","gists_url":"https://api.github.com/users/terrajobst/gists{/gist_id}","starred_url":"https://api.github.com/users/terrajobst/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/terrajobst/subscriptions","organizations_url":"https://api.github.com/users/terrajobst/orgs","repos_url":"https://api.github.com/users/terrajobst/repos","events_url":"https://api.github.com/users/terrajobst/events{/privacy}","received_events_url":"https://api.github.com/users/terrajobst/received_events","type":"User","site_admin":false},"labels":[{"id":1103392601,"node_id":"MDU6TGFiZWwxMTAzMzkyNjAx","url":"https://api.github.com/repos/dotnet/corefx/labels/api-candidate-for-standard","name":"api-candidate-for-standard","color":"d1b817","default":false},{"id":703517252,"node_id":"MDU6TGFiZWw3MDM1MTcyNTI=","url":"https://api.github.com/repos/dotnet/corefx/labels/api-suggestion","name":"api-suggestion","color":"1d76db","default":false},{"id":153713253,"node_id":"MDU6TGFiZWwxNTM3MTMyNTM=","url":"https://api.github.com/repos/dotnet/corefx/labels/area-System.Linq","name":"area-System.Linq","color":"d4c5f9","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":6,"created_at":"2018-10-18T00:21:10Z","updated_at":"2018-11-01T00:33:40Z","closed_at":null,"author_association":"MEMBER","body":"From standard created by [tbrettallen](https://github.com/tbrettallen) : dotnet/standard#509  \n\nFor the sake of code clarity, my team uses an IEnumerable extension method None instead of !Any().\r\n\r\nCurrently our implementation is:\r\n\r\n```\r\n    public static bool None<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)\r\n    {\r\n      return !source.Any<TSource>(predicate);\r\n    }\r\n```\r\n\r\nWhile it might be superfluous, ReSharper and other code analytics tools don't recognize this when analyzing LINQ statements. For example, it has many times suggested changing All(x => x.y != z) into !Any(x => x.y == z).\r\n\r\nI feel this would be a simple to implement standard method for the IEnumerable interface and allow for easier to read code."},"comment":{"url":"https://api.github.com/repos/dotnet/corefx/issues/comments/434892623","html_url":"https://github.com/dotnet/corefx/issues/32878#issuecomment-434892623","issue_url":"https://api.github.com/repos/dotnet/corefx/issues/32878","id":434892623,"node_id":"MDEyOklzc3VlQ29tbWVudDQzNDg5MjYyMw==","user":{"login":"stephentoub","id":2642209,"node_id":"MDQ6VXNlcjI2NDIyMDk=","avatar_url":"https://avatars0.githubusercontent.com/u/2642209?v=4","gravatar_id":"","url":"https://api.github.com/users/stephentoub","html_url":"https://github.com/stephentoub","followers_url":"https://api.github.com/users/stephentoub/followers","following_url":"https://api.github.com/users/stephentoub/following{/other_user}","gists_url":"https://api.github.com/users/stephentoub/gists{/gist_id}","starred_url":"https://api.github.com/users/stephentoub/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stephentoub/subscriptions","organizations_url":"https://api.github.com/users/stephentoub/orgs","repos_url":"https://api.github.com/users/stephentoub/repos","events_url":"https://api.github.com/users/stephentoub/events{/privacy}","received_events_url":"https://api.github.com/users/stephentoub/received_events","type":"User","site_admin":false},"created_at":"2018-11-01T00:33:40Z","updated_at":"2018-11-01T00:33:40Z","author_association":"MEMBER","body":"I understand the original reasoning, but I don't think we should be in the business of adding new APIs that are effectively just differently-named forwarders to existing APIs.  They add very little value and could be done by any developer in any library with as good an implementation as the core libraries can provide.  While adding little value without downsides is something to consider, there are downsides here: additional surface area a developer needs to learn, potential confusion as to when to use None vs !Any, inability to write code to a lower .NET Standard version when such a lower version could easily targeted by using the existing named API, etc."}}
{"actor":{"display_login":"stephentoub"}}