c# - C# 动态在访问属性时抛出 RuntimeBinderException
问题描述
我RuntimeBinderException
在尝试从动态对象中读取属性时遇到了问题。毫无疑问,这是我语法不太正确的问题之一,但我只是没有看到它......
使用一个简单的 LinqPad 脚本,以下工作正常:
void Main()
{
var response = new
{
DotNet = Environment.Version,
ServerName = Environment.MachineName,
};
dynamic d = response;
var x = d.DotNet as Version;
x.Major.Dump();
}
如果我从 Web 方法返回它,那么我就会遇到问题。这是我的简单网络方法(.Net 5 WebAPI)
public IActionResult GetEnvironmentDetails()
{
var response = new
{
DotNet = Environment.Version,
ServerName = Environment.MachineName,
};
return this.Ok(response);
}
在我的单元测试中,我可以使用反射读取属性,但不能使用动态:
var c = new MyController();
var response = c.GetEnvironmentDetails() as OkObjectResult;
// This next line gets me the property using reflection:
Version dotNet = response.Value.GetType().GetProperty("DotNet").GetValue(response.Value, null) as Version;
// But...using dynamics
dynamic d = response.Value;
// then the following fails for me
object x = d.DotNet;
如果我将变量d
放在我的 WATCH 窗口中,则 Value 显示为{ DotNet = {5.0.4}, ServerName = "MyComputerName" }
,Type 为<Anonymous Type>
。
解决方案
推荐阅读
- if-statement - If/Then 语句写入,用于从另一个单元格中提取空白单元格
- python - 使用跨度对象。[斯帕西,蟒蛇]
- powershell - 在 .BAT 程序中获取 Powershell 返回代码
- javascript - 如何禁用 vuejs 路由器链接?
- kubernetes - 有条件的舵钩
- c# - 选择语句:无效的列名,在 C# 中使用 Dapper
- php - 从数组 .. 中查找字符串中的所有匹配项并返回匹配项
- android - 当我在数据库中保存为时间戳的日期临近时,Firestore 是否可以向我的应用发送通知?
- matlab - 缺少 Matlab 共享库导致的错误
- android - java.io.FileNotFoundException: Permission denied - 在颤振中我得到了这个错误