便利なヘルパー/拡張メソッド:
私は通常、他の回答で言及されているジョブにいくつかのヘルパー拡張メソッドを使用します:
public static class IEnumerableExtensions
{
public static IEnumerable<TKey> GetNonNull<TSource, TKey>(this IEnumerable<TSource> source, Func<TSource, TKey?> keySelector)
where TKey : struct
{
return source.Select(keySelector)
.Where(x => x.HasValue)
.Select(x => x.Value);
}
// the two following are not needed for your example, but are handy shortcuts to be able to write :
// myListOfThings.GetNonNull()
// whether myListOfThings is List<SomeClass> or List<int?> etc...
public static IEnumerable<T> GetNonNull<T>(this IEnumerable<T?> source) where T : struct
{
return GetNonNull(source, x => x);
}
public static IEnumerable<T> GetNonNull<T>(this IEnumerable<T> source) where T : class
{
return GetNonNull(source, x => x);
}
}
あなたの場合の使用法:
// will get all non-null SplOrderId in your Orders list,
// and you can use similar syntax for any property of any object !
List<int> lst = Orders.GetNonNull(u => u.SplOrderID);
変換中に null 値を単純に無視したくない読者向け
おそらく、元のnullGetValueOrDefault(defaultValue)
値を保持したいが、それらをデフォルト/センチネル値に変換したい場合があります。(defaultValue
パラメータとして指定) :
あなたの例では:
// this will convert all null values to 0 (the default(int) value)
List<int> lst =
Orders.Select(u => u.GetValueOrDefault())
.ToList();
// but you can use your own custom default value
const int DefaultValue = -1;
List<int> lst =
Orders.Select(u => u.GetValueOrDefault(DefaultValue))
.ToList();