相关疑难解决方法(0)

有没有办法记住或物化IEnumerable?

当给出一个d你可能正在处理一个固定的序列,如列表或数组,AST将枚举一些外部数据源,甚至是一些现有集合上的AST.有没有办法安全地"实现"可枚举,以便像foreach,count等枚举操作每次都不执行AST?

我经常用来.ToArray()创建这个表示,但如果底层存储已经是一个列表或其他固定序列,那似乎就是浪费了复制.如果我能这样做会很好

var enumerable = someEnumerable.Materialize();

if(enumberable.Any() {
  foreach(var item in enumerable) {
    ...
  }
} else {
  ...
}
Run Code Online (Sandbox Code Playgroud)

不必担心,.Any()foreach尝试枚举序列两次,没有它不成功复制可枚举.

c# linq

8
推荐指数
2
解决办法
2736
查看次数

如何查看GenericTypeDefinition是否实现IEnumerable <>

我有一个方法,检查类型是否是通用的,然后检查GenericTypeDefinition是否是IEnumerable<>.

static Type GetEnumerableType(Type type)  
{  
    if(type.IsGenericType) {  
        var genericTypeDefinition = type.GetGenericTypeDefinition();  
        if (genericTypeDefinition == typeof(IEnumerable<>)) {  
            return type.GetGenericArguments()[0];  
        }  
    }  
    return null;  
}
Run Code Online (Sandbox Code Playgroud)

如果它是一个IEnumerable,它就像一个魅力.如果GenericTypeDefinition是IList<>List<>它不起作用.我试过了..

typeof(IEnumerable<>).IsAssignableFrom(genericTypeDefinition)
Run Code Online (Sandbox Code Playgroud)

..没有成功.当然必须有更好的方法然后链接其他语句?

c# generics types

6
推荐指数
2
解决办法
2539
查看次数

标签 统计

c# ×2

generics ×1

linq ×1

types ×1