在javascript中,您可以使用undefined关键字检测属性是否已定义:
if( typeof data.myProperty == "undefined" ) ...
Run Code Online (Sandbox Code Playgroud)
你如何在C#中使用带有ExpandoObject和不带异常的动态关键字来做到这一点?
我有一个用例,我需要检查一个值是否是C#7 ValueTuple,如果是,则循环遍历每个项目.我试着用检查obj is ValueTuple和obj is (object, object)但是这两个的返回false.我发现我可以使用obj.GetType().Name并检查它是否以它开头,"ValueTuple"但这对我来说似乎很蹩脚.任何替代品都会受到欢迎.
我也有获得每个项目的问题.我尝试Item1使用此处找到的解决方案:如何检查c#中动态匿名类型上是否存在属性?但((dynamic)obj).GetType().GetProperty("Item1")返回null.我希望我能做一件事while来获得每件物品.但这不起作用.我如何获得每件商品?
更新 - 更多代码
if (item is ValueTuple) //this does not work, but I can do a GetType and check the name
{
object tupleValue;
int nth = 1;
while ((tupleValue = ((dynamic)item).GetType().GetProperty($"Item{nth}")) != null && //this does not work
nth <= 8)
{
nth++;
//Do stuff
}
}
Run Code Online (Sandbox Code Playgroud) 我无法对返回匿名对象的ASP.NET Core MVC控制器进行单元测试.单元测试在单独的项目中设置,并直接从主项目调用控制器方法.
控制器方法返回IActionResult但通常这些OkObjectResult和BadRequestObjectResult对象被转换为具有适当HTTP状态代码的JSON响应.匿名对象作为对象的构造函数参数传递,ObjectResult正是这些我试图对(可访问的ObjectResult.Value)进行断言.
我发现这个问题(我如何访问asp.net 5中的内部)有一个答案,说使用动态和添加
[assembly: InternalsVisibleTo("Namespace")]
Run Code Online (Sandbox Code Playgroud)
到AssemblyInfo.cs允许测试项目访问匿名对象的内部对象属性.但是,最新版本的ASP.NET Core MVC没有AssemblyInfo.cs,并且在链接问题的答案中建议添加一个也不起作用.
是否现在有一个不同的位置来添加InternalsVisibleTo或我错过了什么?
我有这个代码:
object test = new {a = "3", b = "4"};
Console.WriteLine(test); //I put a breakpoint here
Run Code Online (Sandbox Code Playgroud)
如何访问对象的a属性test?当我放一个断点时,visual studio可以看到这个对象的变量......为什么我不能?我真的需要访问这些.