--- source_files: - Common/DTS.Common.Storage/Classes/Static/CustomChannelFieldSizeAttribute.cs generated_at: "2026-04-16T02:11:01.276588+00:00" model: "Qwen/Qwen3-Coder-Next-FP8" schema_version: 1 sha256: "96c94c51da2a1b2d" --- # Static ## 1. Purpose This module provides a mechanism to associate custom, non-default field sizes with enum values representing channel fields in the `MMETables.MMEPossibleChannelsFields` enumeration. It enables runtime retrieval of field-specific size metadata via a custom attribute (`CustomChannelFieldSizeAttribute`) and extension methods, supporting scenarios where the default size inference (e.g., based on underlying type or convention) is insufficient or incorrect. ## 2. Public Interface - **`CustomChannelFieldSizeAttribute(int size)`** *Constructor.* Creates an attribute instance with the specified field size. `size` must be non-negative (enforced by caller; no validation in constructor). - **`int Size { get; }`** *Property.* Returns the field size stored in the attribute. Read-only after construction. - **`int GetFieldSize(MMETables.MMEPossibleChannelsFields field)`** *Extension method.* Retrieves the field size for a given `MMEPossibleChannelsFields` enum value by inspecting its `CustomChannelFieldSizeAttribute`. Throws `NullReferenceException` if the attribute is not applied to the enum value (since `.Size` is accessed on a `null` reference returned by `GetAttribute<>()`). - **`TAttribute GetAttribute(this Enum value)`** *Extension method.* Returns the first (and expected only) custom attribute of type `TAttribute` applied to the enum value, or `null` if none exists. Uses reflection to inspect the enum field’s attributes. ## 3. Invariants - `CustomChannelFieldSizeAttribute` is only intended for use on `MMETables.MMEPossibleChannelsFields` enum members. - The `Size` property must be set at construction and remains immutable thereafter. - `GetFieldSize` assumes exactly one `CustomChannelFieldSizeAttribute` per enum member; behavior is undefined if multiple attributes are applied (though `SingleOrDefault()` would return the first if duplicates exist, which is invalid per attribute semantics). - `GetAttribute` returns `null` if no attribute of type `TAttribute` is present on the enum value. ## 4. Dependencies - **Internal dependencies:** - `MMETables.MMEPossibleChannelsFields` enum (from `MMETables` namespace—external to this file but referenced in `GetFieldSize`). - Standard .NET reflection APIs (`System.Type`, `System.Reflection.FieldInfo`, `System.Linq.Enumerable`). - **No external NuGet or third-party dependencies** beyond the base class library. - **Dependent modules:** Any code that needs to retrieve field sizes for `MMEPossibleChannelsFields` values—likely storage or serialization components dealing with channel data. ## 5. Gotchas - **Null reference risk:** `GetFieldSize` will throw `NullReferenceException` if `CustomChannelFieldSizeAttribute` is not applied to the queried enum member (since `GetAttribute<>()` returns `null`, and `.Size` is dereferenced unconditionally). Callers must ensure the attribute is present or guard against `null`. - **No validation on `size`:** The constructor accepts any `int`, including negative values. No runtime checks enforce valid size constraints (e.g., `size ≥ 0`). - **Reflection overhead:** `GetAttribute` uses reflection on every call; not suitable for hot paths without caching. - **Ambiguity in `MMETables` namespace:** The `MMETables.MMEPossibleChannelsFields` type is referenced but not defined here; its actual definition and available members are unknown from this file alone. - **No XML documentation:** The source contains no comments; behavior is inferred solely from code structure.