2010-11-27 65 views
0

我想知道: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

回答

7

我想說一個更可讀的版本是:

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

OfType過濾器在給定類型的輸入序列(運行)和FirstOrDefault找到第一個Run實例,其Text屬性以給定輸入結束(如果沒有找到,則爲null)。

0

這就是所謂的「強大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; } 
     } 

現在你可以決定哪個是最好編寫

3

它是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#中的關鍵字,但Stackoverflow使它看起來像一個。

另外請注意,一旦您習慣了Linq,它甚至可以讀取更少的內容!

1

此代碼似乎與.NET Framework中的RichTextBox類有關。

CaretPosition.Paragraph.Inlines是構成段落主體的「內聯」的集合。

該代碼基本上尋找Run類型的任何Inlines,並將matchedRun的值設置爲第一個實例(如果有的話)。FirstOrDefault方法是查看對象集合內部的簡便方法,如果集合爲空,則檢索第一個元素或默認值。就可讀性而言,如果您熟悉LINQ語法,儘管我親自發現Lee提供的示例代碼更具可讀性 - 主要是因爲使用另一個LINQ表達式:OfType