首页 新闻 搜索 专区 学院

.net4.0 新特性 dynamic 跨项目无法使用的问题

0
悬赏园豆:5 [已解决问题] 解决于 2013-03-12 14:24

有如下的测试代码,在项目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; } }
}
落魄的000的主页 落魄的000 | 初学一级 | 园豆:199
提问于:2013-03-11 23:18
< >
分享
最佳答案
0

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;
        }

收获园豆:5
张占岭 | 菜鸟二级 |园豆:464 | 2013-03-12 13:12

你好,我也遇到这个问题,那怎么才可以跨程序集解析呢?

竹墨轩 | 园豆:58 (初学一级) | 2013-06-07 15:26
其他回答(1)
0

测试过,没有该问题。

报什么错呢

陈希章 | 园豆:2338 (老鸟四级) | 2013-03-12 08:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册