相关疑难解决方法(0)

用C#4对动态物体进行鸭型测试

我想在C#中使用动态对象进行简单的鸭子打字示例.在我看来,动态对象应该具有HasValue/HasProperty/HasMethod方法,其中包含一个字符串参数,用于在尝试对其运行之前查找的值,属性或方法的名称.我试图避免尝试/捕获块,如果可能的话,更深入的反射.在动态语言(JS,Ruby,Python等)中进行鸭子输入似乎是一种常见的做法,即在尝试使用它之前测试属性/方法,然后回退到默认值或抛出受控异常.下面的例子基本上就是我想要完成的.

如果上述方法不存在,是否有人有动态的预制扩展方法来执行此操作?


示例:在JavaScript中,我可以非常轻松地测试对象上的方法.

//JavaScript
function quack(duck) {
  if (duck && typeof duck.quack === "function") {
    return duck.quack();
  }
  return null; //nothing to return, not a duck
}
Run Code Online (Sandbox Code Playgroud)


我如何在C#中做同样的事情?

//C# 4
dynamic Quack(dynamic duck)
{
  //how do I test that the duck is not null, 
  //and has a quack method?

  //if it doesn't quack, return null
}
Run Code Online (Sandbox Code Playgroud)

duck-typing dynamic c#-4.0

32
推荐指数
2
解决办法
1万
查看次数

标签 统计

c#-4.0 ×1

duck-typing ×1

dynamic ×1