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
相关产品推荐
相关产品推荐

