当我寻找答案时,我得到的点击是指从短到 int ,从可空到非可空。但是,我不知道如何从“较大”类型 int?转换为“较小”类型 short?。
我能想到的唯一方法就是编写一个这样的方法:
private short? GetShortyOrNada(int? input)
{
if(input == null)
return (short?)null;
return Convert.ToInt16(input.Value);
}
我希望在一行中这样做,因为它只在项目的整个代码库中完成一个地方,并且不会有任何变化。
答案 0 :(得分:11)
简单演员怎么了?我测试过,效果很好。
private static short? GetShortyOrNada(int? input)
{
checked//For overflow checking
{
return (short?) input;
}
}
答案 1 :(得分:1)
您可以使用条件表达式替换条件语句,如下所示:
short? res = input.HasValue ? (short?)Convert.ToInt16(input.Value) : null;
答案 2 :(得分:1)
这就是你要找的东西吗?
private short? GetShortyOrNada(int? input)
{
if(input == null)
return (short?)null;
if(input > Int16.MaxValue)
return Int16.MaxValue;
if(input < Int16.MinValue)
return Int16.MinValue;
return Convert.ToInt16(input.Value);
}
我刚刚为过大值的情况添加了IF子句。
如果您只想在值不在所需范围内时返回null:
private short? GetShortyOrNada(int? input)
{
if(input == null || input < Int16.MinValue || input > Int16.MaxValue)
return (short?)null;
return Convert.ToInt16(input.Value);
}
希望这会有所帮助。