zoukankan      html  css  js  c++  java
  • 泛型委托 Func<out T>,当返回的数据是一个匿名类型的时候该怎么办

    当我们需要用到一个返回 匿名类型的委托的时候,我们该怎么弄,我们知道,声明一个匿名对象时,可以用 var 关键字来配合声明,既

    var data = new { id = 3, name = "bdadsfg" };

    但是当用一个lambda表达式去给一个委托赋值时,

     vs 编译器会直接提示报错。

    解决方法有两种,

    1.用dynamic关键字

                Func<dynamic> func2 = () =>
                {
                    return new { id = 2, name = "bac" };
                };
    
                var res2 = func2();

    2.声明一个方法来中间过渡

            /// <summary>
            /// BuildFunc实际上并没有做任何事情 – 它只是提供了让编译器为Func<>的泛型类型参数进行类型推断所需的方法调用
            /// </summary>
            public static Func<TResult> BuildFunc<TResult>(Func<TResult> function)
            {
                return function;
            }
                var func3 = BuildFunc(() =>
                {
                    return new { id = 3, name = "bac" };
                });

     用第二种方法,用过截图可以看到,委托执行的结果res3可以直接利用vs的快捷功能直接点出来 id和name。这就在编译阶段确认了安全性,而第一种的 dynamic 关键字 是一个动态类型,是到运行时才解析数据的类型。安全性就相对差一些,所以个人推荐第二种

  • 相关阅读:
    iSeries存储过程笔记
    最近做得的网站
    两个iSeries存储过程的示例
    索引的怪异问题
    Saas的概念感触
    asp.net 2.0的TextBox遭遇ReadOnly=True时ViewState不回传的问题
    网上看到的一句诗
    DB2/400到Oracle的迁移
    如何往自己的网站增加Asp.net Ajax
    default关键字作用
  • 原文地址:https://www.cnblogs.com/xiaoZhang521/p/12988843.html
Copyright © 2011-2022 走看看