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

Blazor泛型组件中如何测试传入对象的类型?

解决Blazor泛型组件中判断参数类型的问题

你报错的原因是typeof()操作符的使用错误——它需要传入类型名称,但AssignedValues是你定义的实例参数变量,不是类型,所以VS会提示找不到对应的类型或命名空间。

下面是几种正确的判断方式:

1. 使用GetType()方法(判断实例的实际类型)

通过实例的GetType()方法获取其运行时类型,再和目标类型对比。注意要先判断实例不为null,否则会触发空引用异常:

if (AssignedValues != null && AssignedValues.GetType() == typeof(Dictionary<int, string>))
{
    // 执行对应逻辑
}

2. 判断泛型参数TItem的类型

因为AssignedValues的类型就是泛型参数TItem,所以可以直接对比typeof(TItem),这种方式不需要担心空值问题:

if (typeof(TItem) == typeof(Dictionary<int, string>))
{
    // 执行对应逻辑
}

3. 使用模式匹配(推荐)

C#的模式匹配语法is不仅能判断类型,还能直接将实例转换为目标类型的变量,同时自动处理空值(如果AssignedValues是null,判断结果为false):

if (AssignedValues is Dictionary<int, string> assignedDict)
{
    // 直接使用assignedDict变量,无需额外转换
}

补充说明

如果需要判断AssignedValues是否是目标类型的子类/实现类,不要用==,改用typeof(Dictionary<int, string>).IsAssignableFrom(typeof(TItem))(针对泛型参数),或者直接用模式匹配is(会自动处理继承/实现关系)。

内容的提问来源于stack exchange,提问作者bilpor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 00:33:13