Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:那是什么技术代码?_C#_Linq - Fatal编程技术网

C#:那是什么技术代码?

C#:那是什么技术代码?,c#,linq,C#,Linq,我想知道: 那个代码是什么技术 你能重写代码让它更可读吗,因为我能 没有完全理解它的意思 Paragraph para = CaretPosition.Paragraph; var matchedRun = para.Inlines.FirstOrDefault(inline => { Run run = inline as Run; return (run != null && run.Text.EndsWith(inputText)); }) as Ru

我想知道:

  • 那个代码是什么技术

  • 你能重写代码让它更可读吗,因为我能 没有完全理解它的意思

    Paragraph para = CaretPosition.Paragraph;
    
    
    var matchedRun = para.Inlines.FirstOrDefault(inline =>
    {
       Run run = inline as Run;
       return (run != null && run.Text.EndsWith(inputText));
    }) as Run;
    
    
    if (matchedRun != null)
    {
    
    
    }
    
  • 它被称为“强大的LINQ技术”:

    开玩笑

    Linq方法用于从集合中获取第一个元素或返回默认值

    var matchedRun = para.Inlines.FirstOrDefault(inline =>{   Run run = inline as Run;   return (run != null && run.Text.EndsWith(inputText));}) as Run;
    
    =>被称为Lambda技术,用于速记玛瑙脱蜡

    所以你可以把它读作

    从para.Inlines集合中查找第一个对象,该对象在该集合中以某个用户提供的值结尾,如果未找到匹配项,则重新运行默认值

    如果您不想使用这种实际上减少了大量代码的技术,那么您可以尝试使用以下等价代码

            Paragraph para = CaretPosition.Paragraph;
            var matchedRun = null;
            foreach (var inl in para.Inlines)
            {   Run run = inl as Run; 
                if ((run != null) && run.Text.EndsWith(inputText))
                { matchedRun = run; break; } 
            }
    

    现在,您可以决定写哪个更好,我想更可读的版本是:

    var matchedRun = para.Inlines
        .OfType<Run>()
        .FirstOrDefault(r => r.Text.EndsWith(intputText));
    
    var matchedRun=para.Inlines
    第()类
    .FirstOrDefault(r=>r.Text.EndsWith(intputText));
    

    OfType
    过滤给定类型(Run)上的输入序列,并
    FirstOrDefault
    查找第一个
    Run
    实例,该实例的
    Text
    属性以给定输入结尾(如果未找到,则为null)。

    它是Linq。你知道“var”关键字吗?这是一种编译器知道但程序员不想编写的类型

    在不使用Linq的情况下重新编写的代码是

    Paragraph para = CaretPosition.Paragraph;
    
    Run matchedRun = null;
    foreach (var inl in para.Inlines)
    {
       Run run = inl as Run;
       if( (run != null) && run.Text.EndsWith(inputText))
       {
         matchedRun = run;
         break;
       }  
    }
    
    if (matchedRun != null)
    {
    
    
    }
    
    注意,我将“inline”转换为“inl”。它在C#中不是一个关键字,但Stackoverflow使它看起来像一个关键字


    还要注意的是,一旦你习惯了Linq,它的可读性就更差了

    此代码似乎与.NET Framework中的类相关

    是组成段落主体的“内联线”的集合

    代码基本上是查找类型为
    Run
    的任何
    内联线
    ,并将
    matchedRun
    的值设置为第一个实例(如果有)。
    FirstOrDefault
    方法是查看对象集合内部并检索第一个元素或默认值(如果集合为空)的简单方法


    就可读性而言,如果您熟悉LINQ语法,那么仔细阅读该代码也不算太糟糕,尽管我个人确实觉得提供的示例代码可读性更好—主要是因为使用了另一个LINQ表达式:

    作为注释发布,因为我只能回答(1)它是LINQ。你对代码了解多少?他不完全理解它的意思。了解你对代码不了解的地方会有帮助。@HPT他???整个var块,但是Lee做了很好的重写!这很好,我以前从未遇到过类型的