c# - 通用方法由于未知原因返回动态
问题描述
我有以下通用方法签名
public static T? TryConvertToEnum<T>(object obj, T? defaultValue = null) where T : struct, IConvertible
这工作正常!我遇到的问题是 VS 在此调用中似乎出现了意外行为:
dynamic dynamicValue = "1";
var value= ConversionHelper.TryConvertToEnum<MyEnum>(dynamicValue);
问题是“值”的类型是“动态的”,我不知道为什么我希望它是“MyEnum?”
有没有人预料到这种行为或知道为什么会这样?
解决方案
几乎你对 type 值所做的所有事情都会dynamic
产生dynamic
. 当然,您知道TryConvertToEnum
要调用的方法的返回类型——但是您传入的是动态参数,这意味着它直到执行时才被绑定。在执行时,可能会有一个带有string
参数和不同返回类型的其他方法。
在极少数情况下,表达式包含动态值但仍然没有结果类型dynamic
. 在我的脑海中,它们是:
- 构造函数调用(总是被构造的类型)
- 运算符(
is
总是布尔值) as
运算符(总是命名为第二个操作数的类型)
在您的情况下,只需使用object
而不是dynamic
调用将被静态绑定,并且value
类型为MyEnum?
.
推荐阅读
- google-apps-script - 触发器在 Google Apps 脚本中的表单提交上不起作用
- kotlin - Kotlin 中流发出的并行处理值
- c - adc 频率与精度
- node.js - 如何在 NestJS 控制器中注入请求范围的提供程序?
- sql - 错误:PLS-00103:遇到符号“;” 当期望以下之一时:* & = - + < / > at in is mod remaining not rem then
- python - 使用 Python 显示电子邮件的完整原始来源
- python - 在 Python 中获取每月的假期数
- javascript - 有没有办法在用户登录后使用 Javascript 将用户重定向回原始目的地?
- linux - Line:54 grep chainID 后提供的两条 awk 语句的目的是什么
- php - PHP, MYSQL 的问题