You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
> Starting with **v5**, the library was reorganised with a new namespace (from `DomainCommonExtensions` to `RzR.Extensions.Domain`) and focused into namespace buckets under the new root `RzR.Extensions.Domain.*`
> Class names and method signatures are unchanged — only the namespaces moved.
11
-
>
12
-
> To soften the upgrade, every old (v4) namespace is preserved as `[Obsolete]` forwarder static classes under
13
-
> [`src/DomainCommonExtensions/_Legacy/`](src/DomainCommonExtensions/_Legacy/), so existing v4 code keeps compiling
14
-
> while the IDE highlights every call-site with the new location.
15
-
>
16
-
> See the full mapping in [docs/namespace-migration-v5.md](docs/namespace-migration-v5.md).
13
+
</details>
14
+
15
+
<br />
16
+
17
17
18
18
This library/repository was created as a way to simplify the development process. It collects the most used extension methods for primitive data types (`int`, `string`, `DateTime`, `Enum`, `bool`, `byte`, `char`, `Guid`, `TimeSpan`, …) and for the common collection interfaces (`ICollection`, `IEnumerable`, `IList`, `HashSet`, `IQueryable`, `IDictionary`, `ConcurrentDictionary`, `Queue`, `DynamicList`, …).
19
19
20
20
It also bundles `cryptography` helpers for encrypting/decrypting strings by key with `RSA`, `AES`, `TEA`, plus a `Base32` encoder and a password generator.
21
21
22
+
A `TimeSeqId` generator in `Primitives` produces time-ordered, lexicographically sortable 48-character unique identifiers with 64-bit CSPRNG entropy and a SHA-256 integrity checksum — a structured, sortable alternative to `Guid`.
23
+
22
24
If you need to extract documentation/comments from an `Assembly`, those extensions are here too. You will also find async lazy-load primitives `AsyncLazy<T>` and `AsyncExpiringLazy<T>`.
23
25
24
26
Additionally, there are extensions for `System.Data` (`DbDataReader`, `IDataRecord`, `DataTable`), `FileStream`, `MemoryStream`, `Type`, plus `Linq` / `Expression` extensions and a `PredicateBuilder` to keep call-sites clean.
@@ -31,12 +33,11 @@ I hope I'm on the right way to providing all these things to all who saw or sear
31
33
**You can find a [demo](https://demowebutils.iamrzr.dev/) with some of the extension methods on the [demowebutils](https://demowebutils.iamrzr.dev/) website.**
32
34
33
35
34
-
**In case you wish to use it in your project, you can install the package from <ahref="https://www.nuget.org/packages/DomainCommonExtensions"target="_blank">nuget.org</a>** or specify what version you want:
36
+
**In case you wish to use it in your project, you can install the package from <ahref="https://www.nuget.org/packages/RzR.Extensions.Domain"target="_blank">nuget.org</a>** or specify what version you want:
***BREAKING:**`_Legacy/` backward-compatibility shim layer removed. The `[Obsolete]` forwarder namespaces introduced in v5 no longer exist. All consuming code must use `RzR.Extensions.Domain.*` namespaces. See [namespace-migration-v5.md](namespace-migration-v5.md) for the full mapping.
3
+
*[DEV] - (RzR) -> New `TimeSeqId` generator in `Primitives`: time-ordered, lexicographically sortable 48-character unique identifier. Format: `yyyy-MMdd-HHmmssfff-SSSS-RRRRRRRRRRRRRRRR-HHHHHH` (year / date / time-ms / sequence / 16-hex random / 6-char SHA-256 checksum). Fully thread-safe; IDs sort in generation order by plain string comparison.
***BREAKING:** Repository reorganized into 11 stable namespace buckets (`Async`, `Collections`, `Cryptography`, `Data`, `Diagnostics`, `Internal`, `IO`, `Linq`, `Models`, `Primitives`, `Reflection`, `Text`, `Validation`). Class names and method signatures are unchanged; only the namespaces moved. See [namespace-migration-v5.md](namespace-migration-v5.md) for the full mapping.
3
8
***Backward-compat shim layer** (`_Legacy/` folder): `[Obsolete]` static methods preserve the v4 namespaces so existing user code still compiles. Each call site lights up with the new v5 location.
Copy file name to clipboardExpand all lines: docs/usage.md
+51-5Lines changed: 51 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,11 +4,11 @@ Most of these extension methods are self-explanatory. Browse the source for the
4
4
5
5
The source code is open, so you can check what is available and pick what is useful for your project.
6
6
7
-
> **Namespaces (v5).** Since v5 the library is with a new namespace (from `DomainCommonExtensions` to `RzR.Extensions.Domain`), and split into focused buckets under `RzR.Extensions.Domain.*`
// e.g. "2026-0528-143022123-0001-A3F7B2C9D1E50246-X5K3P2"
149
+
```
150
+
151
+
### Guarantees
152
+
153
+
| Property | Detail |
154
+
|---|---|
155
+
|**Single-process uniqueness**| The `(timestamp, sequence)` pair is unique within one process; `Generate()` is fully thread-safe. |
156
+
|**Distributed uniqueness**| Two replicas hitting the same millisecond + sequence slot collide with probability **1 in 2⁶⁴ ≈ 5 × 10⁻²⁰** via block `[4]`. |
157
+
|**Lexicographic sort order**| IDs sort in generation order by plain string comparison — no parsing required. |
158
+
|**Monotonicity**| Within one process, IDs are strictly non-decreasing. Burst capacity: 9 999 IDs/ms before the generator waits for the next millisecond (lock is released during the wait). |
159
+
|**Integrity**| Block `[5]` is a SHA-256 checksum over blocks `[0]`–`[4]`. Tampering any preceding block changes the checksum. |
0 commit comments