哪个性能更好

mal*_*kam 2 .net c# linq performance

使用LINQ,以下哪项性能更好?

sets.FirstOrDefault(x=>x.name=="xxx")
Run Code Online (Sandbox Code Playgroud)

要么

sets.FirstOrDefault(x=>!string.IsNullOrEmpty(x.name) && x.name.Equals("xxx",StringComparison.InvariantCultureIgnoreCase));
Run Code Online (Sandbox Code Playgroud)

这里的名字可以null.我在我的应用程序中使用此类查询20次以上.

有没有更好的方法?

Pat*_*man 6

这两个陈述之间存在重大差异,因此您不仅可以判断它们的性能.

第一个表现更好,但第二个表现不同(因为它不检查大/小写和变音符号).

或者,您可以像这样重写第二个:

sets.FirstOrDefault(x => string.Equals(x.name, "xxx",StringComparison.OrdinalIgnoreCase));
Run Code Online (Sandbox Code Playgroud)

它不需要string.IsNullOrEmpty使第二次调用比它快一点.

正如韦斯顿所指出的那样:使用OrdinalIgnoreCase性能更好InvariantCultureIgnoreCase,因此微软的这个通知.