You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 18:23:11