小编Pat*_*ley的帖子

通用语法糖或真正的改进

我有一个关于以下方法调用的问题:

var ctl1 = this.FindControlRecursively("SomeField") as HiddenField;
var ctl = this.FindControlRecursively<HiddenField>("SomeField");
Run Code Online (Sandbox Code Playgroud)

这是这两个电话的IL:

IL_0010:  ldstr      "AsyncReset"
IL_0015:  call       class [System.Web]System.Web.UI.Control   [Amc.WebG081.MethodExtensions]Amc.WebG081.ControlExtensions::FindControlRecursively(class [System.Web]System.Web.UI.Control,string)

IL_001a:  isinst     [System.Web]System.Web.UI.WebControls.HiddenField
IL_001f:  stloc.0
IL_0020:  ldarg.0
IL_0021:  ldstr      "AsyncReset"
IL_0026:  call       !!0 [Amc.WebG081.MethodExtensions]Amc.WebG081.ControlExtensions::FindControlRecursively<class [System.Web]System.Web.UI.WebControls.HiddenField>(class [System.Web]System.Web.UI.Control,string)
Run Code Online (Sandbox Code Playgroud)

我一直认为在这种情况下,这种方法的通用版本更像是"语法糖"而不是真正的改进.IL讲的是另一个故事吗?

c# asp.net generics il

8
推荐指数
1
解决办法
335
查看次数

PredicateBuilder返回零记录

我正在使用PredicateBuilder创建一个动态Where子句来查询DataTable中的数据.我有一个包含我需要搜索的列名和值的字典.我只是迭代字典,如果键匹配列名,则将该键和值添加到谓词.一切似乎工作正常,直到对数据表运行实际查询,我得到零记录:(但如果我用p => p ["年"] =="2010"之类的东西替换动态谓词,我得到记录回来.这是代码:

var objectList = table.AsEnumerable();
Func<DataRow, bool> predicate = GetPredicate(parms, table.Columns);

var list1 = objectList.Where(predicate).ToList();

private static Func<DataRow, bool> GetPredicate(Dictionary <string, string> parms, DataColumnCollection dataColumnCollection)
    {
        var predicate = PredicateBuilder.False<DataRow>();
        foreach (var parm in parms)
        {
            if (dataColumnCollection.Contains(parm.Key))
            {
                var copy = parm;
                predicate = predicate.And(p => p[copy.Key] == copy.Value);
            }
        }
        return predicate.Compile();
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激:)

c# linq predicate where predicatebuilder

4
推荐指数
1
解决办法
777
查看次数

为什么c#编译器仍然从未使用的方法中读取编译代码?

说我有两种方法,一种叫另一种.第二种方法的代码会产生编译时错误.由于它没有被调用,为什么编译器仍然懒得处理它?

void method1()
{
    var i = 1;
    //method2();
}

void method2()
{
    int i = "2";
}
Run Code Online (Sandbox Code Playgroud)

c# compiler-construction

1
推荐指数
1
解决办法
202
查看次数