开发者

C#: What technic is that code?

I would like to know:

  1. What technic is that code?

  2. Can you rewrite that code to make it more readable, because I do not completely u开发者_高级运维nderstand its meaning.

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


I'd say a more readable version would be:

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

OfType filters the input sequence on the given type (Run) and FirstOrDefault finds the first Run instance whose Text property ends with the given input (or null if none was found).


It's Linq. Do you know the "var" keyword? It's a type that the compiler knows but the programmer doesn't want to write.

The re-written code without using Linq is

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


}

Note that I converted "inline" to "inl". It's not a keyword in C# but Stackoverflow makes it look like one.

Also note that it's even LESS readable once you get accustomed to Linq!


This code appears to be related to the RichTextBox class in the .NET Framework.

The CaretPosition.Paragraph.Inlines is a collection of "Inlines" that make up the body of the paragraph.

The code is basically looking for any Inlines that are of type Run, and setting the value of matchedRun to that first instance if there are any. The FirstOrDefault method is simply a convenient way to look inside a collection of objects and retrieve the first element or a default value if the collection is empty.

As far as readability, if you are familiar with LINQ syntax, it isn't too bad to wade through that code, though I do personally find the example code provided by Lee to be a bit more readable - mostly because of the use of another LINQ expression: OfType


it's called "THE MIGHTY LINQ TECHNIQUE" :)

Jokes apart

it is Linq method to get the First element from the collection or return default value.

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

=> is called the Lambda techique for shorthand delagate decalaration

so you can read it as

Find 1st object from the para.Inlines collection where that object EndsWith some user suplied value or retrun default value if no match found

if you don't want to use this technique which actually reduces lot of code so you can try below equibvalent code

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

Now you can decide which is better to write

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜