我正在通过代码审查并看到可疑的东西。
在下面的代码段中结果是否为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时,结果是否可以为空?
答案 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}}。