IEnumerable 对象是否需要进行 null 检查?

发布于 2024-11-05 04:47:04 字数 429 浏览 1 评论 0原文

var selectedRows = from drow in ugTable.Rows
                         .Cast<Infragistics.Win.UltraWinGrid.UltraGridRow>()
                         .Where(drow => drow != null && drow.Selected) 
                   select drow;

if(selectedRows.Count()==1){//do something with selected rows}

从上面的语句中,我是否需要检查 selectedRows 变量的 Null ? selectedRows 是一个 IEnumerable 变量。

var selectedRows = from drow in ugTable.Rows
                         .Cast<Infragistics.Win.UltraWinGrid.UltraGridRow>()
                         .Where(drow => drow != null && drow.Selected) 
                   select drow;

if(selectedRows.Count()==1){//do something with selected rows}

From the above statement, do i need to check Null for the selectedRows variable? selectedRows is an IEnumerable variable.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

断爱 2024-11-12 04:47:04

您不需要检查 selectedRows 是否为 null。返回的 IEnumerable<> 可能为空,但绝不会为 null

顺便说一句,我建议您通过编写以下内容来简化代码:

var selectedRows
    = ugTable.Rows.Cast<Infragistics.Win.UltraWinGrid.UltraGridRow>()
                  .Where(drow => drow != null && drow.Selected);

哪个更短且等效。

You do not need to check if selectedRows is null. The returned IEnumerable<> might be empty, but it will never be null.

As an aside, I'd suggest you simplify your code by writing:

var selectedRows
    = ugTable.Rows.Cast<Infragistics.Win.UltraWinGrid.UltraGridRow>()
                  .Where(drow => drow != null && drow.Selected);

Which is shorter and equivalent.

镜花水月 2024-11-12 04:47:04

如果 where 没有匹配项,LINQ 查询将返回一个空列表(0 项)。

因此,无需检查 null

The LINQ query will return an empty list (0 items), if there are no matches on the where.

So, no need to check for null.

哥,最终变帅啦 2024-11-12 04:47:04

在您的示例中,您可以使用扩展方法。但是,如果您要实现自己的返回 IEnumerable 的方法,则答案取决于您返回结果的方式。

以下方法返回一个空的枚举:

IEnumerable<object> Correct()
{
    yield break;
}

以下方法仅返回 null:

IEnumerable<object> Incorrect()
{
    return null;
}

调用这些方法将给出以下结果:

Correct().Any(); // returns false
Incorrect().Any(); // throws ArgumentNullException

因此,返回 IEnumerable 时要小心。尝试使用yield关键字并遵循正确的模式。

In your example you'll be fine using the extension method. But if you were to implement your own method that returned an IEnumerable, the answer depends on how you return your result.

The following method returns an empty enumerable:

IEnumerable<object> Correct()
{
    yield break;
}

The following method just returns null:

IEnumerable<object> Incorrect()
{
    return null;
}

Calling these methods will give the following results:

Correct().Any(); // returns false
Incorrect().Any(); // throws ArgumentNullException

So be careful when you return IEnumerable. Try to use the yield keyword and following the correct pattern.

稀香 2024-11-12 04:47:04

我最初的感觉是不,你不会,但这肯定不会造成伤害。

我认为 Phil Haack 有一个有用的扩展方法,可以检查 IEnumerable 是否为 null 或为空...

    /// <summary>
    /// Determines whether the collection is either null or empty.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="source">The source collection.</param>
    /// <returns>
    ///     <c>true</c> if the collection is null or empty; otherwise, <c>false</c>.
    /// </returns>
    public static bool IsNullOrEmpty<T>(this IEnumerable<T> source)
    {
        return source == null || !source.Any();
    }

.Any() 对于检查 .Count() 是否为空

My initial feeling is no, you don't but it certainly can't hurt.

I have, from I think Phil Haack, a useful extension method that checks to see if an IEnumerable is null or empty...

    /// <summary>
    /// Determines whether the collection is either null or empty.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="source">The source collection.</param>
    /// <returns>
    ///     <c>true</c> if the collection is null or empty; otherwise, <c>false</c>.
    /// </returns>
    public static bool IsNullOrEmpty<T>(this IEnumerable<T> source)
    {
        return source == null || !source.Any();
    }

.Any() is much more efficient for checking if not empty than .Count()

拔了角的鹿 2024-11-12 04:47:04

Linq 不会返回 NULL 。如果您想检查某些数据是否存在,可以使用 Any()

var selectedRows = from drow in ugTable.Rows
                         .Cast<Infragistics.Win.UltraWinGrid.UltraGridRow>()
                         .Where(drow => drow != null && drow.Selected) 
                   select drow;
if(selectedRows .Any())
{
//your code
}

Linq wont retrun NULL . If you want to check some data is there you can go with Any()

var selectedRows = from drow in ugTable.Rows
                         .Cast<Infragistics.Win.UltraWinGrid.UltraGridRow>()
                         .Where(drow => drow != null && drow.Selected) 
                   select drow;
if(selectedRows .Any())
{
//your code
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文