相关疑难解决方法(0)

在C#中,当您在null对象上调用扩展方法时会发生什么?

是使用null值调用方法还是提供null引用异常?

MyObject myObject = null;
myObject.MyExtensionMethod(); // <-- is this a null reference exception?
Run Code Online (Sandbox Code Playgroud)

如果是这种情况,我永远不需要检查我的'this'参数是否为null?

c# parameters null extension-methods

310
推荐指数
5
解决办法
4万
查看次数

我是否需要考虑处理我使用的任何IEnumerable <T>?

它最近向我指出,各种LINQ的扩展方法(如Where,Select等)返回IEnumerable<T>,恰巧也有IDisposable.以下评估结果True

new int[2] {0,1}.Select(x => x*2) is IDisposable
Run Code Online (Sandbox Code Playgroud)

我是否需要处理Where表达式的结果?

每当我打电话给一个方法返回时IEnumerable<T>,我(可能)接受在我完成它时调用dispose的责任吗?

c# linq ienumerable dispose

69
推荐指数
1
解决办法
1万
查看次数

C#是否具有List/IEnumerable的IsNullOrEmpty?

我知道一般空列表比NULL更喜欢.但我将返回NULL,主要有两个原因

  1. 我必须明确检查和处理空值,避免错误和攻击.
  2. ??之后很容易执行操作以获得返回值.

对于字符串,我们有IsNullOrEmpty.有没有C#本身为List或IEnumerable做同样的事情?

c# ienumerable isnullorempty

66
推荐指数
4
解决办法
7万
查看次数

建议检查序列是否为空的方法

方法返回一个序列,IEnumerable<T>您现在想要检查它是否为空.你怎么建议这样做?我正在寻找良好的可读性和良好的性能.

第一种也是最明显的方法是检查计数是否大于零:

if(sequence.Count() == 0)
Run Code Online (Sandbox Code Playgroud)

具有良好的可读性,但性能可怕,因为它必须实际完成整个序列.

我有时使用的方法如下:

if(!sequence.Any())
Run Code Online (Sandbox Code Playgroud)

这并不是(据我所知)必须经历整个序列,但可读性有点倒退和尴尬.(读好了很多,如果我们检查的顺序是不是空的,虽然).

另一种选择是First在try-catch中使用,如下所示:

try
{
    sequence.First();
}
catch(InvalidOperationException)
{
    // Do something
}
Run Code Online (Sandbox Code Playgroud)

不是一个非常漂亮的解决方案,也可能更慢,因为它使用异常和东西.FirstOrDefault当然可以通过使用来防止这种情况,但如果序列中的第一项实际上默认值,则会出现大问题;)

那么,检查序列是否为空的任何其他方法?你经常使用哪一个?你建议使用哪一种?

注意:为了获得最佳的可读性,我可能会将上述一个片段放在IsEmpty扩展方法中,但我仍然很好奇,因为我必须在该方法中做一些事情:p

c# linq ienumerable

47
推荐指数
2
解决办法
3万
查看次数

IEnumerable是空的?

我知道在大多数情况下它可能无关紧要/影响性能,但我讨厌IEnumerable做到和做的想法.Count().是否有一个IsEmptyNotEmpty或一些功能?(类似于stl empty())

.net linq ienumerable

46
推荐指数
3
解决办法
3万
查看次数

为什么Any()不能处理ac#null对象

在null对象上调用Any()时,它会在C#中抛出ArgumentNullException.如果对象为null,那么肯定没有'any',它应该返回false.

为什么C#以这种方式运行?

.net c# ienumerable object

44
推荐指数
4
解决办法
3万
查看次数

c#null和Any()检查的快捷方式

通常在C#中我必须这样做

if(x.Items!=null && x.Items.Any())
{ .... }
Run Code Online (Sandbox Code Playgroud)

收藏品有捷径吗?

c# linq

10
推荐指数
1
解决办法
1万
查看次数

如何正确检查IEnumerable的现有结果

检查集合是否有物品的最佳做法是什么?

这是我的一个例子:

var terminalsToSync = TerminalAction.GetAllTerminals();

if(terminalsToSync.Any())
    SyncTerminals(terminalsToSync);
else
    GatewayLogAction.WriteLogInfo(Messages.NoTerminalsForSync);
Run Code Online (Sandbox Code Playgroud)

GetAllTerminals()方法将执行一个存储过程,如果我们返回一个结果(Any()is true),SyncTerminals()将循环遍历这些元素; 从而再次枚举它并第二次执行存储过程.

避免这种情况的最佳方法是什么?

我想要一个可以在其他情况下使用的好解决方案; 可能没有把它转换成List.

提前致谢.

c# linq

5
推荐指数
2
解决办法
434
查看次数

检查变量是空还是空的正确方法

我有以下代码,我的同事告诉我这是不正确的,如果我的变量为null将崩溃:

List<FSKUser> users = null;

if (users == null || users.Count() == 0)
{
   return false;
}
Run Code Online (Sandbox Code Playgroud)

显然这=null只是为了测试目的.但是,当我运行此代码时,它正确运行并返回false.

我正在检查一种安全正确的检查方式吗?

c# null

3
推荐指数
1
解决办法
1359
查看次数

检查 null 后出现空引用异常(检查 null 不起作用)

看一下这段代码:

var categories = tokens.SelectMany(x => x.Categories);

if (categories != null)
{
    if (categories.Contains("interp")) //null ref exception
    {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试在类别中查找“interp”字符串时,出现空引用异常。所以看来“类别!= null”不起作用。

我找到了一些建议(这里How to check if IEnumerable is null orempty?),但它们涉及使用.Any()。但它只会使异常更早地准确(使用 .Any() 时)。甚至 ?.Any() 也会引发异常。

有任何想法吗?

.net c# ienumerable nullreferenceexception

2
推荐指数
1
解决办法
986
查看次数

集合有一个方便的IsNullOrEmpty方法吗?

String有一个方便的String.IsNullOrEmpty方法,用于检查字符串是否为null或长度为零.在开箱即用的.net中有类似的东西吗?

.net c# collections

0
推荐指数
2
解决办法
1910
查看次数