C#:代码是什么技术?
我想知道:C#:代码是什么技术?
什么的技术方法的代码?
-
你可以重写该代码,使其更具可读性,因为我做 不完全理解其含义。
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) { }
我想说一个更可读的版本是:
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
发表评论,因为我只能回答(1)它是LINQ。你对代码的理解是什么? – BoltClock 2010-11-27 14:32:45
他不完全明白它的意思。 – 2010-11-27 14:35:33
这将有助于了解您对此不了解的内容。 – 2010-11-27 14:36:04