有如下的测试代码,在项目A中有类class3,项目B中有类class2,都使用了dynamic,但测试中发现,测试代码2会报错,但1是正常的,是不是dynamic不能跨项目(类库)使用?
项目B如下:namespace test2
{ public class Class2 { public void test(out dynamic t) { t = new { Top = "1", Left = "2" }; return; } } class Program { static void Main(string[] args) { try { //1.同项目中的类 Class2 test1 = new Class2(); dynamic d1; test1.test(out d1); Console.WriteLine(d1.Top); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } try { //2.不同项目中的类 test1.Class3 test2 = new test1.Class3(); dynamic d2; test2.test(out d2); Console.WriteLine(d2.Top); } catch (Exception ex) { Console.WriteLine(ex.ToString()); }
Console.Read();
} } }
项目A如下:
namespace test1
{
public class Class3 { public void test(out dynamic t) { t = new { Top = "1", Left = "2" }; return; } }
}
dynamic本身可以跨项目引用,这是没有问题的,但是你上面的不能输出d2.Top的原因是你返回的匿名对象的问题,如果你的Top属性在原来的项目里输出是可以的,而你的dynamic返回的对象在另一个项目里也是可以访问到的,只是它返回的匿名类型不能解析而以。
/// <summary>
/// 返回匿名类型,匿名类型是internal,所以不能跨程序集解析
/// </summary>
/// <returns></returns>
public static dynamic Testdynamic()
{
return new { user = 1 };
}
/// <summary>
/// 直接返回值类型
/// </summary>
/// <returns></returns>
public static dynamic TestdynamicForValueType()
{
return 1;
}
/// <summary>
/// 本程序集中可以解析匿名类型
/// </summary>
/// <returns></returns>
public static int print()
{
return Testdynamic().user;
}
你好,我也遇到这个问题,那怎么才可以跨程序集解析呢?
测试过,没有该问题。
报什么错呢