相关疑难解决方法(0)

将单个项目作为IEnumerable <T>传递

是否有一种常见的方法将单个类型的项传递给T需要IEnumerable<T>参数的方法 ?语言是C#,框架版本2.0.

目前我正在使用一个辅助方法(它是.Net 2.0,所以我有一大堆类似于LINQ的转换/投射辅助方法),但这看起来很愚蠢:

public static class IEnumerableExt
{
    // usage: IEnumerableExt.FromSingleItem(someObject);
    public static IEnumerable<T> FromSingleItem<T>(T item)
    {
        yield return item; 
    }
}
Run Code Online (Sandbox Code Playgroud)

其他方式当然是创建和填充a List<T>或an Array而不是传递它IEnumerable<T>.

[编辑]作为扩展方法,它可能被命名为:

public static class IEnumerableExt
{
    // usage: someObject.SingleItemAsEnumerable();
    public static IEnumerable<T> SingleItemAsEnumerable<T>(this T item)
    {
        yield return item; 
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么吗?

[Edit2]我们发现someObject.Yield()(正如@Peter在下面的评论中所建议的那样)是这个扩展方法的最佳名称,主要是为了简洁,所以如果有人想要抓住它的话,它会与XML注释一起:

public static class IEnumerableExt
{
    /// <summary>
    /// Wraps this object instance into an IEnumerable&lt;T&gt;
    /// consisting of a …
Run Code Online (Sandbox Code Playgroud)

.net c# generics ienumerable

357
推荐指数
14
解决办法
8万
查看次数

在C#中,为什么匿名方法不能包含yield语句?

我认为做这样的事情会很好(lambda做一个yield return):

public IList<T> Find<T>(Expression<Func<T, bool>> expression) where T : class, new()
{
    IList<T> list = GetList<T>();
    var fun = expression.Compile();

    var items = () => {
        foreach (var item in list)
            if (fun.Invoke(item))
                yield return item; // This is not allowed by C#
    }

    return items.ToList();
}
Run Code Online (Sandbox Code Playgroud)

但是,我发现我不能在匿名方法中使用yield.我想知道为什么.该产量的文档只是说,这是不允许的.

由于不允许,我只创建了List并将项目添加到其中.

c# yield anonymous-methods yield-return

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

我如何枚举一件物品

可能的重复项:
如何创建单例IEnumerable?
从单个值创建新的IEnumerable <T>序列的最佳方法?

说我需要返回一个仅包含一个元素的IEnumerable。

我可以像这样返回一个列表

return new List<Whatever> (myItem);
Run Code Online (Sandbox Code Playgroud)

或与此相关的数组。

但最好创建一个Singleton方法

public IEnumerable<T> Singleton (T t)
{
yield return t
}
Run Code Online (Sandbox Code Playgroud)

在将其放置到代码中之前,没有一种方法可以执行此操作吗?

.net c# ienumerable

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