本机动态林克 (C#)

本文关键字:林克 动态 本机 | 更新日期: 2023-09-27 17:56:44

是否可以

使用 c# 5.0 (.Net 4.5) 中的 dynamic 关键字来创建动态 LINQ 查询?

我知道使用第三方库可以做到这一点,但现在这不可行。

说明我的观点的最简单方法是通过一个例子:

    class test
    {
        public int i { get; set; }
    }
    void Foo()
    {
        var collection = new[] { new test() { i = 1 }, new test() { i = 2 } };
        Bar(collection);
    }
    void Bar<T>(IEnumerable<T> collection)
    {
        //this works
        foreach (dynamic item in collection)
            if (item.i == 2)
            {
                //do something
            }
        //this does not - although this is what id like to use
        foreach (dynamic item in collection.Where(a => a.i == 2))
        {
            //do something
        }
    }

按请求编辑:生成编译器错误 -

"T"不包含"i"

的定义,并且找不到接受类型"T"的第一个参数的扩展方法"i"(您是否缺少使用指令或程序集引用?

本机动态林克 (C#)

替换 T in Bar 声明以使用动态:

void Bar(IEnumerable<dynamic> collection)
{
    //this works
    foreach (dynamic item in collection)
        if (item.i == 2)
        {
            //do something
        }
    //this does compile
    foreach (dynamic item in collection.Where(a => a.i == 2))
    {
        //do something
    }
}