如何在C#中注解键名和键值对数量未知的元组?
C# 动态处理带命名元组的验证方法实现需求
需求说明
我们需要开发一个库类ValidatableControlsGroup,其中的静态方法HasInvalidInputs需接收带命名键的元组作为参数——元组内键值对的数量、键名均预先未知。
类比TypeScript中的实现,该参数对应的类型是{ [key: string]: ValidatableControl.Payload },可兼容任意结构的键值对对象。
现有代码框架
待实现的库类代码
public class ValidatableControlsGroup { public static bool HasInvalidInputs(object /* TODO 指定更精确的类型 */ controlsPayload) { // TODO 实现逻辑 return true; } }
库使用者的代码示例
public partial class TaskManager : ComponentBase { private (ValidatableControl.Payload taskTitle, ValidatableControl.Payload taskDescription) controlsPayload = ( taskTitle: new ValidatableControl.Payload(initialValue: "", new TaskTitleInputtedDataValidation()), taskDescription: new ValidatableControl.Payload(initialValue: "", new TaskTitleInputtedDataValidation()) ); private void updateTask() { if (ValidatableControlsGroup.HasInvalidInputs(this.controlsPayload)) { ValidatableControlsGroup.PointOutValidationErrors(this.controlsPayload); return; } this.targetTask.Title = this.controlsPayload.taskTitle.GetExpectedToBeValidValue(); this.targetTask.Description = this.controlsPayload.taskDescription.GetExpectedToBeValidValue(); // ... 后续业务逻辑 } }
核心约束
- 使用者体验优先:库的使用者(如
TaskManager)需通过键名直接访问元组中的ValidatableControl.Payload实例,绝对不能要求使用者手动将元组转为数组,或逐个枚举元素传入方法。 - 库内部处理逻辑:
HasInvalidInputs方法仅需判断Payload实例是否无效,无需使用元组的键名,但必须由库自行完成元组元素的提取逻辑,禁止让使用者做额外转换工作。 - 参数类型兼容:参数类型需兼容任意结构的带命名键元组,不能限定固定数量或键名的元组类型。
内容的提问来源于stack exchange,提问作者Takeshi Tokugawa YD
相关产品推荐
相关产品推荐

