我有一个静态方法,其中MyLibrary1返回一个动态对象。
public static dynamic GetObjects()
{
return new { test = "something" };
}
Run Code Online (Sandbox Code Playgroud)
但是当我从 访问上述方法时MyLibrary2,调试器显示正确返回的值和对象。
dynamic b = MyLibrary1.GetObjects();
string name = b.test;
Run Code Online (Sandbox Code Playgroud)
我收到一条RuntimeBinderException写着“'object' does not contain a definition for 'test'当我阅读时b.test。
当我将方法移至调用库时,相同的代码按预期工作。
匿名类型不是公共的,dynamic并不意味着您可以侵入内部/私有的东西并使用它。但反思确实如此。
您可以允许其他程序集使用属性使用内部类型:
// specified in assembly, defining MyLibrary1 class
[assembly: InternalsVisibleTo("Assembly, where you call MyLibrary1.GetObjects()")]
Run Code Online (Sandbox Code Playgroud)
这完全解决了通过动态使用匿名类型的问题。
请注意,这意味着所有内部类型都可以通过指定的程序集访问。
| 归档时间: |
|
| 查看次数: |
1006 次 |
| 最近记录: |