Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# IEnumerable对象是否需要空检查? var selectedRows=来自ugTable.Rows中的drow .Cast() .Where(drow=>drow!=null&&drow.Selected) 选择卓尔; 如果(selectedRows.Count()==1){//对所选行执行某些操作}_C#_.net_Linq_Linq To Objects - Fatal编程技术网

C# IEnumerable对象是否需要空检查? var selectedRows=来自ugTable.Rows中的drow .Cast() .Where(drow=>drow!=null&&drow.Selected) 选择卓尔; 如果(selectedRows.Count()==1){//对所选行执行某些操作}

C# IEnumerable对象是否需要空检查? var selectedRows=来自ugTable.Rows中的drow .Cast() .Where(drow=>drow!=null&&drow.Selected) 选择卓尔; 如果(selectedRows.Count()==1){//对所选行执行某些操作},c#,.net,linq,linq-to-objects,C#,.net,Linq,Linq To Objects,从上面的语句中,我是否需要为selectedRows变量检查Null?selectedRows是一个IEnumerable变量。如果where上没有匹配项,LINQ查询将返回一个空列表(0项) 所以,不需要检查null我最初的感觉是不,你不需要,但这肯定不会造成伤害 我认为Phil Haack提供了一个有用的扩展方法,可以检查IEnumerable是否为null或空 var selectedRows = from drow in ugTable.Rows

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

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


所以,不需要检查
null

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

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

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}
//
///确定集合是null还是空。
/// 
/// 
///源集合。
/// 
///如果集合为null或空,则为true;否则,错误。
/// 
公共静态bool为空(此IEnumerable源)
{
返回source==null | |!source.Any();
}

.Any()
在检查是否为空时比
.Count()
更有效。您无需检查
selectedRows
是否为
null
。返回的
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();
    }
var selectedRows
=ugTable.Rows.Cast()
.Where(drow=>drow!=null&&drow.Selected);

它较短且等效。

Linq不会重新运行NULL。如果你想检查一些数据,你可以去那里

var selectedRows=来自ugTable.Rows中的drow
.Cast()
.Where(drow=>drow!=null&&drow.Selected)
选择卓尔;
如果(selectedRows.Any())
{
//你的代码
}

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

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

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
}

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

awesome。。谢谢你,哈米迪。耶!lambda表达式比linq中的类sql查询更好
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
}
IEnumerable<object> Correct()
{
    yield break;
}
IEnumerable<object> Incorrect()
{
    return null;
}
Correct().Any(); // returns false
Incorrect().Any(); // throws ArgumentNullException