C#:代码是什么技术?

问题描述:

我想知道:C#:代码是什么技术?

  1. 什么的技术方法的代码?

  2. 你可以重写该代码,使其更具可读性,因为我做 不完全理解其含义。

    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) 
    { 
    
    
    } 
    
+0

发表评论,因为我只能回答(1)它是LINQ。你对代码的理解是什么? – BoltClock 2010-11-27 14:32:45

+0

他不完全明白它的意思。 – 2010-11-27 14:35:33

+0

这将有助于了解您对此不了解的内容。 – 2010-11-27 14:36:04

我想说一个更可读的版本是:

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

OfType过滤器在给定类型的输入序列(运行)和FirstOrDefault找到第一个Run实例,其Text属性以给定输入结束(如果没有找到,则为null)。

这就是所谓的“强大LINQ技术” :)

笑话除了

它是Linq的方法来获得从集合的第一个元素或返回默认值。

var matchedRun = para.Inlines.FirstOrDefault(inline =>{ Run run = inline as Run; return (run != null && run.Text.EndsWith(inputText));}) as Run; 

=>被称为拉姆达己技巧速记delagate decalaration

,所以你可以把它读作

查找从para.Inlines 1号集合对象,其中该对象的endsWith一些用户suplied值或如果没有找到匹配,则重新设置默认值

如果您不想使用这种技术,实际上可以减少大量代码,因此您可以尝试使用等价代码

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

现在你可以决定哪个是最好编写

它是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) 
{ 


} 

请注意,我改装后的“内嵌”到“INL”。这不是C#中的关键字,但*使它看起来像一个。

另外请注意,一旦您习惯了Linq,它甚至可以读取更少的内容!

此代码似乎与.NET Framework中的RichTextBox类有关。

CaretPosition.Paragraph.Inlines是构成段落主体的“内联”的集合。

该代码基本上寻找Run类型的任何Inlines,并将matchedRun的值设置为第一个实例(如果有的话)。FirstOrDefault方法是查看对象集合内部的简便方法,如果集合为空,则检索第一个元素或默认值。就可读性而言,如果您熟悉LINQ语法,尽管我亲自发现Lee提供的示例代码更具可读性 - 主要是因为使用另一个LINQ表达式:OfType