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)
{
}
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做了很好的重写!这很好,我以前从未遇到过类型的
。