{"id":15681000,"url":"https://github.com/manuelroemer/ncommons","last_synced_at":"2025-05-07T11:42:15.451Z","repository":{"id":34382380,"uuid":"150421411","full_name":"manuelroemer/NCommons","owner":"manuelroemer","description":"A set of several .NET libraries which provide common building blocks that can be used by any kind of library or application.","archived":false,"fork":false,"pushed_at":"2023-02-22T03:18:13.000Z","size":1687,"stargazers_count":11,"open_issues_count":7,"forks_count":1,"subscribers_count":1,"default_branch":"dev","last_synced_at":"2025-04-26T08:19:44.430Z","etag":null,"topics":["collections","common","csharp","library","monads","observables"],"latest_commit_sha":null,"homepage":"https://manuelroemer.github.io/NCommons","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/manuelroemer.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-09-26T12:14:53.000Z","updated_at":"2024-02-23T01:58:08.000Z","dependencies_parsed_at":"2024-06-21T01:05:41.883Z","dependency_job_id":"53e02e35-1c69-4485-949a-99af875992cd","html_url":"https://github.com/manuelroemer/NCommons","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuelroemer%2FNCommons","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuelroemer%2FNCommons/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuelroemer%2FNCommons/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuelroemer%2FNCommons/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/manuelroemer","download_url":"https://codeload.github.com/manuelroemer/NCommons/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252873460,"owners_count":21817704,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["collections","common","csharp","library","monads","observables"],"created_at":"2024-10-03T16:47:57.922Z","updated_at":"2025-05-07T11:42:15.427Z","avatar_url":"https://github.com/manuelroemer.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NCommons\n\n_A set of several .NET libraries which provide common building blocks that\ncan be used by any kind of library or application._\n\n[:books: Documentation](https://manuelroemer.github.io/NCommons) \u0026nbsp; | \u0026nbsp; [:package: NuGet](https://www.nuget.org/packages?q=ncommons)\n\n\u003chr/\u003e\n\n\nNCommons is a growing set of several .NET libraries which aim to extend\nthe existing .NET Framework BCL.\nIn essence, NCommons could be described as a \"utility library\" which\ndefines common classes that may be useful in any kind of project.\n\nWhile such libraries are certainly nothing new, NCommons has the following\ngoals and advantages:\n\n* **Important members only:**\u003cbr/\u003e\n  NCommons is supposed to be a set of \"no-nonsense\" libraries.\n  In essence, this means that there will be no library which contains\n  members that can be written manually in a very short amount of time.\n  Anything that gets added to one of these library will at least have a\n  medium level of complexity or required boilerplate - basically everything,\n  that is reusable but tedious to write.\n* **It feels like .NET:**\u003cbr/\u003e\n  A lot of time is spent on making NCommon's types feel like .NET.\n  If you know .NET's BCL, you will feel at home when using one of\n  these libraries.\n* **Fully documented:**\u003cbr/\u003e\n  Nearly every public member exposed by the libraries is extensively\n  documented with XML documentation comments.\n* **C# 8.0/Nullable Reference Types Support:**\u003cbr/\u003e\n  The entire library has been built with support for Nullable Reference Types.\n\n\n## Available Libraries\n\n### NCommons.Collections [![Nuget](https://img.shields.io/nuget/v/NCommons.Collections)](https://www.nuget.org/packages/NCommons.Collections) ![netstandard2.0](https://img.shields.io/badge/netstandard2.0-lightgrey)\n\n[:books: Documentation](https://manuelroemer.github.io/NCommons/api/NCommons.Collections.html) \u0026nbsp; | \u0026nbsp; [:package: NuGet ](https://www.nuget.org/packages/NCommons.Collections)\n\n`NCommons.Collections` provides several specialized, generic collection-type\nmembers which fill some open gaps in the `System.Collections.Generic` namespace.\n\nNotable members include:\n\n* [`PriorityQueue\u003cT\u003e`](https://manuelroemer.github.io/NCommons/api/NCommons.Collections.PriorityQueue-1.html)\n* [`BinaryHeap\u003cT\u003e`](https://manuelroemer.github.io/NCommons/api/NCommons.Collections.BinaryHeap-1.html)\n* [`PreviewingObservableCollection\u003cT\u003e`](https://manuelroemer.github.io/NCommons/api/NCommons.Collections.PreviewingObservableCollection-1.html)\n* [`WeakReferenceCollection\u003cT\u003e`](https://manuelroemer.github.io/NCommons/api/NCommons.Collections.WeakReferenceCollection-1.html)\n\n\n### NCommons.Monads [![Nuget](https://img.shields.io/nuget/v/NCommons.Monads)](https://www.nuget.org/packages/NCommons.Monads) ![netstandard2.0](https://img.shields.io/badge/netstandard2.0-lightgrey)\n\n[:books: Documentation](https://manuelroemer.github.io/NCommons/api/NCommons.Monads.html) \u0026nbsp; | \u0026nbsp; [:package: NuGet ](https://www.nuget.org/packages/NCommons.Monads)\n\n`NCommons.Monads` provides several members which assist in writing type-safe\nand expressive code. Even though the package is called \"Monads\", the included\nmembers don't necessarily have to be monadic.\nIn general, the goal of the package is to provide utility types, monadic or not,\nwhich assist in writing precise code that still looks and behaves like traditional C#.\nWhile inspired by functional programming languages, the provided types still look\nand feel like types that could come straight from the .NET Framework's BCL.\n\nNotable members include:\n\n* [`Optional\u003cT\u003e`](https://manuelroemer.github.io/NCommons/api/NCommons.Monads.Optional-1.html)\n* [`Variant\u003cT1\u003e, ..., Variant\u003cT1, ..., T8\u003e`](https://manuelroemer.github.io/NCommons/api/NCommons.Monads.Variant-2.html)\n\n\n### NCommons.Observables [![Nuget](https://img.shields.io/nuget/v/NCommons.Observables)](https://www.nuget.org/packages/NCommons.Observables) ![netstandard2.0](https://img.shields.io/badge/netstandard2.0-lightgrey)\n\n[:books: Documentation](https://manuelroemer.github.io/NCommons/api/NCommons.Observables.html) \u0026nbsp; | \u0026nbsp; [:package: NuGet ](https://www.nuget.org/packages/NCommons.Observables)\n\n`NCommons.Observables` provides members which aim to reduce the amount of\nrequired boilerplate code for implementing the MVVM pattern in UI-based\napplications using frameworks like WPF or WinUI.\n\nNotable members include:\n\n* [`ObservableObject`](https://manuelroemer.github.io/NCommons/api/NCommons.Observables.ObservableObject.html)\n\n\n## Installation\n\nEach library described above is available on NuGet. You can install it via:\n\n```sh\nInstall-Package [Package-Name]\n\n--or--\n\ndotnet add package [Package-Name]\n```\n\n\n## Documentation\n\nWhile no hand-written articles are available, a lot of time has been\nspent on writing XML documentation comments inside the source code.\nThe goal is to provide a nearly flawless documentation which\naccurately describes each public member that is exposed by the libraries.\n\nWhile the documentation can easily be viewed in your preferred IDE, you\ncan also browse it [online](https://manuelroemer.github.io/NCommons).\n\nIf you have any issues, feel free to open an issue.\n\n\n## Contributing\n\n* Do you feel that some crucial component is missing?\n* Did you find a bug?\n* Do you want to improve comments or code passages?\n\nIf any of this is true, feel free to open an issue or hit me with a pull request.\nIf you are going to put a larger amount of time into a PR, be sure to talk about the change first!\nOtherwise, feel free to contribute or discuss!\n\n**Be sure to also read the following notes:**\n\n\n### Git and CI\n\nWhenever a commit to `master` finishes, the project is automatically built and published to NuGet.\nChanges to `master` must be in a 100% deployable state (i.e. tested and complete).\n\nChanges should be created on `feature/` branches and collected on the `dev` branch.\nOnce there are enough changes to justify a new NuGet version, `dev` will be merged into `master`\nand published.\n\n\n## License\n\nSee the [LICENSE](./LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanuelroemer%2Fncommons","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanuelroemer%2Fncommons","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanuelroemer%2Fncommons/lists"}