eba*_*eba 3 c# linq overloading
我从IEnumerable中选择一个double值,我怎么能重载FirstOrDefault()函数,在默认情况下返回null,而不是零,我喜欢这样的东西:
double? x = from ... .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
我现在可以捕捉异常,并写双?x = null,但我有20个变量,而不是它的方式
Eri*_*ert 16
不要抓住异常.异常的目的是告诉您有一个错误,而不是作为控制流.
编写自己的扩展方法可以非常直接地执行您想要的操作,所以这样做:
public static double? FirstOrNull(this IEnumerable<double> items)
{
foreach(double item in items)
return item;
return null;
}
Run Code Online (Sandbox Code Playgroud)
或者,如果你想成为它的爱好者:
public static T? FirstOrNull<T>(this IEnumerable<T> items) where T : struct
{
foreach(T item in items)
return item;
return null;
}
Run Code Online (Sandbox Code Playgroud)
合理?
Ani*_*Ani 10
为什么不这样做:
double? x = myDoubles.Cast<double?>().FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
您可以编写以下扩展方法,我只是使用Reflector翻录Code of FirstOrDefault方法并进行修改以满足您的要求.
public static class MyExtension
{
public static TSource? NullOrFirst<TSource>(this IEnumerable<TSource> source) where TSource : struct
{
if (source == null)
{
throw new ArgumentNullException("source");
}
IList<TSource> list = source as IList<TSource>;
if (list != null)
{
if (list.Count > 0)
{
return list[0];
}
}
else
{
using (IEnumerator<TSource> enumerator = source.GetEnumerator())
{
if (enumerator.MoveNext())
{
return enumerator.Current;
}
}
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7935 次 |
| 最近记录: |