C#LINQ:从数组中删除空值并返回不可为空

Dmi*_*rov 3 c# linq

我正在将可空数组转换为无法使用的数组.这是我当前的代码,有两个函数调用:

myarray.Where(e => e.HasValue).Select(e => e.Value)
Run Code Online (Sandbox Code Playgroud)

它看起来像一个非常基本的操作.是否有可能在一次通话中这样做?

kon*_*ked 5

你总是可以做你自己的扩展,但这只会让你的代码看起来更简洁,老实说你的实现是最简洁明了的

public static IEnumerable<T> GetNonNullValues<T>(this IEnumerable<Nullable<T>> items) where T: struct
{
    return items.Where(a=>a.HasValue).Select(a=>a.Value);
}
Run Code Online (Sandbox Code Playgroud)


Fra*_*yce 5

myarray.OfType<int>();
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为如果它们不为null,则可以为其底层类型使用可空类型,但如果它们为null则不会.

  • 完美的!这就是我一直在寻找的。 (2认同)
  • 我要指出的唯一一件事是,我所做的单行的语义与你的略有不同。可能你会想要你的而不是我的。您的代码:“获取所有具有值的可空对象”。我的代码:“获取所有可以成功转换为‘int’的类型”。 (2认同)