可以选择匿名类型为空吗?

时间:2017-02-16 16:44:19

标签: c# .net visual-studio linq

我正在通过代码审查并看到可疑的东西。

在下面的代码段中结果是否为NULL?

        var result = (from number in _cmContext.SrvLocationWarmLine
                      where String.Compare(number.CurrentWarmLine, startingRange, StringComparison.Ordinal) >= 0
                            && String.Compare(number.CurrentWarmLine, endingRange, StringComparison.Ordinal) <= 0
                      orderby number.CurrentWarmLine descending
                      select new { Number = number.CurrentWarmLine }).FirstOrDefault();

更一般地说:当对 select 应用FirstOrDefault时,结果是否可以为空?

1 个答案:

答案 0 :(得分:3)

是。如果序列为空,则package { import flash.display.Bitmap; import flash.utils.Dictionary; import starling.textures.Texture; public class Assets { [Embed(source="../media/graphics/bgWelcome.jpg")] public static const BgWelcome:Class; [Embed(source="../media/graphics/welcome_hero.png")] public static const WelcomeHero:Class; [Embed(source="../media/graphics/welcome_title.png")] public static const WelcomeTitle:Class; [Embed(source="../media/graphics/welcome_playButton.png")] public static const WelcomePlayButton:Class; [Embed(source="../media/graphics/welcome_aboutButton.png")] public static const WelcomeAboutButton:Class; private static var gameTextures:Dictionary = new Dictionary(); public static function getTexture( name: String ): Texture { if( Assets.gameTextures[name] == undefined ){ trace( "Building for", name ); var classObj : Class = Assets[name]; trace( "Class", classObj ); var bitmap : Bitmap = new classObj() as Bitmap; trace( "Bitmap", bitmap ); trace( "Assign value" ); Assets["gameTextures"][name] = Texture.fromBitmap( bitmap ); trace("Value assigned" ); } return Assets.gameTextures[name]; } } } result 如果null中的number_cmContext.SrvLocationWarmLine子句中的条件不匹配,则会发生这种情况。

通常where(没有谓词参数)为空序列返回FirstOrDefault()(无论该序列是由null还是从不同的东西返回的。)

如果序列中没有与谓词匹配的元素,select将返回FirstOrDefault<T>(this IEnumerable<T>, Predicate<T>)

请注意,查询语法中的null已转换为select方法调用。

编辑:当然,只有当最终序列的元素类型是引用类型时,上述内容才适用。对于值类型,结果将是Select(...),例如default(type)的{​​{1}}。