85 lines
4.5 KiB
Markdown
85 lines
4.5 KiB
Markdown
---
|
|
source_files:
|
|
- Common/DTS.Common.SharedResource/EnumDescriptionTypeConverterShared.cs
|
|
generated_at: "2026-04-16T11:30:16.984345+00:00"
|
|
model: "zai-org/GLM-5-FP8"
|
|
schema_version: 1
|
|
sha256: "accee265bcf5788d"
|
|
---
|
|
|
|
# Documentation: EnumDescriptionTypeConverterShared
|
|
|
|
## 1. Purpose
|
|
|
|
`EnumDescriptionTypeConverterShared` is a type converter that enables displaying human-readable descriptions for enumeration values instead of their raw string names. It extends `System.ComponentModel.EnumConverter` and is designed for UI data binding scenarios (particularly WPF). When an enum value has a `System.ComponentModel.DescriptionAttribute`, this converter extracts that description and optionally localizes it via the `StringResources` resource manager before returning it for display.
|
|
|
|
---
|
|
|
|
## 2. Public Interface
|
|
|
|
### `EnumDescriptionTypeConverterShared(Type type)`
|
|
|
|
**Signature:** Constructor
|
|
|
|
**Description:** Initializes a new instance of the converter for the specified enum type. Delegates to the base `EnumConverter` constructor.
|
|
|
|
---
|
|
|
|
### `public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)`
|
|
|
|
**Signature:** `object ConvertTo(ITypeDescriptorContext, CultureInfo, object, Type)`
|
|
|
|
**Description:** Converts an enum value to a display string. Behavior:
|
|
- If `destinationType` is not `string`, delegates to `base.ConvertTo()`
|
|
- If `value` is `null`, returns `string.Empty`
|
|
- If the enum field cannot be resolved via reflection, returns `string.Empty`
|
|
- If no `DescriptionAttribute` is present or the description is empty, returns `value.ToString()`
|
|
- If a `DescriptionAttribute` exists, attempts to look up the description text as a resource key via `StringResources.ResourceManager.GetString()`
|
|
- If the resource lookup returns null/whitespace, returns the raw description text; otherwise returns the localized string
|
|
|
|
---
|
|
|
|
### `public static string GetEnumDescription(Enum value)`
|
|
|
|
**Signature:** `static string GetEnumDescription(Enum)`
|
|
|
|
**Description:** A utility method that retrieves the description for an enum value. Behavior:
|
|
- Uses reflection to get the enum field's `DescriptionAttribute`
|
|
- If attributes exist, attempts localization via `StringResources.ResourceManager.GetString()`
|
|
- Returns the localized string if found; otherwise returns the raw description
|
|
- If no `DescriptionAttribute` is present, returns `value.ToString()`
|
|
|
|
---
|
|
|
|
## 3. Invariants
|
|
|
|
- The converter only modifies output when `destinationType == typeof(string)`; all other type conversions are passed through to the base class.
|
|
- The `DescriptionAttribute.Description` property is treated as a resource key first; if no matching resource is found, the raw description text is used as a fallback.
|
|
- `ConvertTo` always returns a non-null string (either the description, the enum name, or `string.Empty`).
|
|
- `GetEnumDescription` always returns a non-null string (either the description, the enum name, or the raw description text).
|
|
|
|
---
|
|
|
|
## 4. Dependencies
|
|
|
|
**This module depends on:**
|
|
- `System` - Core BCL types (`Type`, `string`, `object`)
|
|
- `System.ComponentModel` - `EnumConverter`, `DescriptionAttribute`, `ITypeDescriptorContext`
|
|
- `System.Globalization` - `CultureInfo`
|
|
- `System.Linq` - `Enumerable.Any()` extension method
|
|
- `DTS.Common.SharedResource.Strings.StringResources` - Resource manager for localization lookups
|
|
|
|
**Consumers:**
|
|
- Not determinable from source alone. Based on the class design and referenced article URL, it is intended for WPF data binding scenarios where enum values are displayed in UI controls.
|
|
|
|
---
|
|
|
|
## 5. Gotchas
|
|
|
|
1. **Null handling inconsistency:** `ConvertTo` has explicit null checks for `value` and returns `string.Empty`, but `GetEnumDescription` has no null check for its `value` parameter. Passing `null` to `GetEnumDescription` will throw a `NullReferenceException` when calling `value.GetType()`.
|
|
|
|
2. **Missing field info handling inconsistency:** `ConvertTo` checks if `fi` (field info) is null and returns `string.Empty`, but `GetEnumDescription` does not perform this check. If reflection fails to find the field, `GetEnumDescription` will throw a `NullReferenceException`.
|
|
|
|
3. **Resource key collision:** The `DescriptionAttribute.Description` value is used directly as a resource key. If the description text itself is not intended as a resource key but happens to match one, unintended localization may occur.
|
|
|
|
4. **Culture parameter ignored:** The `ConvertTo` method accepts a `culture` parameter but does not use it; the resource manager's default culture is used instead. |