标签: ienumerable

如何将IEnumerable <string>转换为逗号分隔的字符串?

假设出于调试目的,我希望快速将IEnumerable的内容转换为单行字符串,每个字符串项以逗号分隔.我可以使用foreach循环在辅助方法中完成它,但这既不好玩也不简短.可以使用Linq吗?其他一些短途的方式?

c# linq string collections ienumerable

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

C#或滑动窗口枚举器中的成对迭代

如果我有一个IEnumerable像:

string[] items = new string[] { "a", "b", "c", "d" };
Run Code Online (Sandbox Code Playgroud)

我想循环通过所有连续项目(大小为2的滑动窗口).这将是

("a","b"), ("b", "c"), ("c", "d")
Run Code Online (Sandbox Code Playgroud)

我的解决方案就是这样

    public static IEnumerable<Pair<T, T>> Pairs(IEnumerable<T> enumerable) {
        IEnumerator<T> e = enumerable.GetEnumerator(); e.MoveNext();
        T current = e.Current;
        while ( e.MoveNext() ) {
            T next = e.Current;
            yield return new Pair<T, T>(current, next);
            current = next;
        }
    }

 // used like this :
 foreach (Pair<String,String> pair in IterTools<String>.Pairs(items)) {
    System.Out.PrintLine("{0}, {1}", pair.First, pair.Second)
 }
Run Code Online (Sandbox Code Playgroud)

当我编写这段代码时,我想知道.NET框架中是否已经存在执行相同操作的函数,并且它不仅适用于对,而且适用于任何大小的元组.恕我直言应该有一个很好的方法来做这种滑动窗口操作.

我使用C#2.0,我可以想象使用C#3.0(w/LINQ)有更多(更好)的方法来做到这一点,但我主要对C#2.0解决方案感兴趣.不过,我也很欣赏C#3.0解决方案.

.net c# ienumerable iterator

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

我应该使用IEnumerable或IList?

任何人都可以告诉我何时应该使用它们.

例如,我想当我想访问集合的.Count或单个项目时,我应该使用IList,对吗?

谢谢.

c# ienumerable ilist

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

IEnumerable和IEnumerable <T>之间的区别?

IEnumerable和之间有什么区别IEnumerable<T>

我已经看到很多框架类实现了这两个接口,因此我想知道通过实现它们可以获得哪些优势?

请看看他们是如何定义的:

public interface IEnumerable
{
    [DispId(-4)]
    IEnumerator GetEnumerator();
}
public interface IEnumerable<T> : IEnumerable
{
    IEnumerator<T> GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)

正如我们所看到的,IEnumerable<T>源于IEnumerable,这意味着无论IEnumerable有什么,IEnumerable<T>继承,那么为什么我们实现两者而不仅仅是IEnumerable<T>?实施IEnumerable<T>还不够吗?

同样,还有其他类似的对:

  • IListIList<T>
  • ICollectionICollection<T>

我也想知道这些.

c# generics ienumerable ilist icollection

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

通用NOT约束,其中T:!IEnumerable

根据标题,是否可以在c#4中声明类型否定约束?

.net c# generics ienumerable

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

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

方法返回一个序列,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 <T>集合中删除项目

我有一个popuplated IEnumerable<User>集合.

我想从中删除一个项目,我该怎么做?

foreach(var u in users)
{
  if(u.userId = 1123)
  {
    // remove!
  }
}
Run Code Online (Sandbox Code Playgroud)

我知道你不应该在循环时删除,所以我不介意创建新集合或删除它.

但我不知道如何删除一个项目,因为某种原因丢失了!

或者我也很困惑,如何创建一个新的集合,如:

IEnumerable<User> modifiedUsers = new List<User>();

foreach(var u in users)
{
   if(u.userId != 1233)
   {
        modifiedUsers.add ??????
   }
}
Run Code Online (Sandbox Code Playgroud)

如何添加到集合中?

c# ienumerable

47
推荐指数
5
解决办法
9万
查看次数

IEnumerable是空的?

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

.net linq ienumerable

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

计算IEnumerable的计数(非通用)

任何人都可以帮助我(非通用接口)的Count扩展方法IEnumerable.

我知道LINQ不支持它但是如何手动编写它?

.net c# linq ienumerable extension-methods

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

从IEnumerable <T>中删除项目

我有2个IEnumerable集合.

IEnumerable<MyClass> objectsToExcept 
Run Code Online (Sandbox Code Playgroud)

IEnumerable<MyClass> allObjects.
Run Code Online (Sandbox Code Playgroud)

objectsToExcept可能包含来自的对象allObjects.

我需要从中删除allObjects对象objectsToExcept.例如:

foreach (var myClass in objectsToExcept)
{
allObjects.Remove(myClass);
}
Run Code Online (Sandbox Code Playgroud)

要么

allObject.Except(objectsToExcept)
Run Code Online (Sandbox Code Playgroud)

但它不起作用.方法执行后的计数表示没有删除任何项目.

c# linq ienumerable

45
推荐指数
4
解决办法
8万
查看次数