Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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# 可能使用.GetType()多次枚举IEnumerable警告_C#_Linq_Resharper_Enumerator_Gettype - Fatal编程技术网

C# 可能使用.GetType()多次枚举IEnumerable警告

C# 可能使用.GetType()多次枚举IEnumerable警告,c#,linq,resharper,enumerator,gettype,C#,Linq,Resharper,Enumerator,Gettype,我使用以下代码获得ReSharper警告“IEnumerable可能多次枚举”: public void Mymethod(IEnumerable<int> entities) { var enumerator = entities.GetEnumerator(); var entityType = entities.GetType(); } public void Mymethod(IEnumerable实体) { var枚举器=entities.GetEnumera

我使用以下代码获得ReSharper警告“IEnumerable可能多次枚举”:

public void Mymethod(IEnumerable<int> entities)
{
   var enumerator = entities.GetEnumerator();
   var entityType = entities.GetType();
}
public void Mymethod(IEnumerable实体)
{
var枚举器=entities.GetEnumerator();
var entityType=entities.GetType();
}
正如在许多stackoverflow主题中所描述的(以及在上所描述的)一样,ReSharper识别出查询运行了两次

我的问题是,为什么“GetType()”语句被识别为查询

有什么建议吗


提前感谢。

为了调用
GetTypes
,需要从ReSharper的角度对
实体
进行评估(它不知道
GetTypes
是否需要对枚举进行评估,这就是为什么它说“可能的多重枚举”)。由于ReSharper发现方法中有多个位置具有相同的场景,因此它会发出此警告


这可能是问题,也可能不是问题,这取决于
实体
表示的内容以及您对其执行的操作。如果它表示内存中的数组,或者您执行的操作不遍历列表,那么就不需要太担心了。如果您对它进行迭代,并且它表示一个将进入数据库的查询,那么最好显式地枚举它(通过调用
ToList
ToArray
),然后根据结果进行操作。

这只是因为Resharper不够聪明
GetType
不是一个虚拟方法,它不会影响
IEnumerable

我很确定它指的是
枚举器
行。它可能正在寻找相应的
Dispose()
调用。我得到了这两条语句的警告。如果我只调用了两次.GetType(),而不是.GetEnumerator()@AakashM,也会发生这种情况。@AakashM:感谢您在中提交。看起来下一个版本会修复这个错误。我期待更新;-)<代码>实体是处于特定状态的对象。一个电话怎么能改变这种状态?@dtb:我有点不清楚;这是从ReSharper的角度讲的。感谢您指出这一点,我更新了答案以澄清这一点。