相关疑难解决方法(0)

在C#中使用yield

我对中的yield关键字有一个模糊的理解,但我还没有看到在我的代码中使用它的必要性.这可能源于对它缺乏了解.

那么,一些典型的好用法是yield什么?

c# yield-return

22
推荐指数
1
解决办法
4607
查看次数

什么时候使用Yield?

我什么时候应该使用退货收益率,何时才能使用退货?

c#

22
推荐指数
4
解决办法
2696
查看次数

19
推荐指数
2
解决办法
6493
查看次数

你将如何实现IEnumerator接口?

我有一个将对象映射到对象的类,但与字典不同,它以两种方式映射它们.我现在正在尝试实现迭代值的自定义IEnumerator接口.

public class Mapper<K,T> : IEnumerable<T>, IEnumerator<T>

{
    C5.TreeDictionary<K,T> KToTMap = new TreeDictionary<K,T>();
    C5.HashDictionary<T,K> TToKMap = new HashDictionary<T,K>();

    public void Add(K key, T value)
    {
        KToTMap.Add(key, value);
        TToKMap.Add(value, key);

    }

    public int Count
    {
        get { return KToTMap.Count; }
    }


    public K this[T obj]
    {
        get
        {
            return TToKMap[obj];
        }
    }

    public T this[K obj]
    {
        get
        {
            return KToTMap[obj];
        }
    }

    public IEnumerator<T> GetEnumerator()
    {
        return KToTMap.Values.GetEnumerator();
    }

    public T Current
    {
        get { throw new NotImplementedException(); }
    } …
Run Code Online (Sandbox Code Playgroud)

.net collections

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

枚举器实现:使用struct还是class?

我注意到List<T>它将枚举器定义为a struct,同时ArrayList将其枚举器定义为class.有什么不同?如果我要为我的班级写一个调查员,哪一个更好?

编辑:我的要求无法使用yield,所以我正在实现我自己的枚举器.也就是说,我想知道是否更好地遵循这些方法List<T>并将其作为结构实现.

.net c# enumeration struct-vs-class

11
推荐指数
5
解决办法
5698
查看次数

无法理解C#中的产量

我希望能够对我最近在调试器中完成的一个片段做一些澄清,但是根本无法理解.

我正在PluralSight学习C#课程,目前的主题是关于并使用关键字返回a .yieldIEnumerable<T>

我有这个过于基本的函数,它返回一个(一个带有的简单类,和)的IEnumerable集合:VendorsIdCompanyNameEmail

public IEnumerable<Vendor> RetrieveWithIterator()
{
    this.Retrieve(); // <-- I've got a breakpoint here
    foreach(var vendor in _vendors)
    {
        Debug.WriteLine($"Vendor Id: {vendor.VendorId}");
        yield return vendor;
    }
}
Run Code Online (Sandbox Code Playgroud)

我在单元测试中得到了这个代码,我用它来测试函数:

var vendorIterator = repository.RetrieveWithIterator(); // <-- Why don't it enter function?
foreach (var item in vendorIterator) // <-- But starts here?
{
    Debug.WriteLine(item);
}
var actual = vendorIterator.ToList();
Run Code Online (Sandbox Code Playgroud)

我真的无法理解,我确信很多初学者都遇到了同样的问题,这就是为什么初始调用RetrieveWithIterator不会启动函数,而是在我们开始迭代其返回的IEnumerable集合时开始(见评论).

.net c# yield yield-return

11
推荐指数
2
解决办法
7795
查看次数

我怎样才能只暴露一个IList <>的片段?

我有一个暴露内部IList <>的类属性

System.Collections.ObjectModel.ReadOnlyCollection<>
Run Code Online (Sandbox Code Playgroud)

如何在ReadOnlyCollection<>不将元素复制到新数组的情况下传递其中的一部分(我需要实时视图,而目标设备内存不足)?我的目标是Compact Framework 2.0.

c# compact-framework windows-mobile .net-2.0

10
推荐指数
2
解决办法
1594
查看次数

收益率关键字增值?

仍然试图找到我在实际情况下使用"yield"关键字的位置.

我在这个主题上看到了这个主题

C#中使用的yield关键字是什么?

但是在接受的答案中,他们将此作为一个例子,其中某人正在迭代Integers()

public IEnumerable<int> Integers()
{
yield return 1;
yield return 2;
yield return 4;
yield return 8;
yield return 16;
yield return 16777216;
}
Run Code Online (Sandbox Code Playgroud)

但为什么不用

list<int>
Run Code Online (Sandbox Code Playgroud)

在这里.似乎更直截了当..

c# ienumerable iterator yield

7
推荐指数
2
解决办法
1930
查看次数

良率无法理解功能

首先,我已经搜索了这个,但我仍然无法理解何时使用yield.

例如,我有以下代码:

string[] days = { "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };

public System.Collections.IEnumerator GetEnumerator()
{
    for (int i = 0; i < days.Length; i++)
    {
        yield return days[i];
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码和下面的代码之间有什么区别?

string[] days = { "Sun", "Mon", "Tue", "Wed", "Thr", "Fri", "Sat" };

public System.Collections.IEnumerator GetEnumerator()
{
    for (int i = 0; i < days.Length; i++)
    {
        return days[i];
    }
}
Run Code Online (Sandbox Code Playgroud)

你能告诉我什么时候使用产量吗?

.net c# visual-studio-2010

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

IEnumerable这样的接口如何在没有正确实现的情况下工作?

根据我对接口的理解,为了使用它们,你必须通过在冒号后面添加接口的名称来声明一个类正在实现它,然后实现这些方法.

我目前正在学习枚举器,IEnumerable等等,这让我很困惑.这是我的意思的一个例子:

static IEnumerable<int> Fibs(int fibCount)
{
    for (int i = 0, prevFib = 1, curFib = 1; i < fibCount; i++) {
        yield return prevFib;
        int newFib = prevFib + curFib;
        prevFib = curFib;
        curFib = newFib;
    }
}
Run Code Online (Sandbox Code Playgroud)

IEnumerable似乎是一个普通的接口,我甚至检查了方法定义,这就是它的样子.

我怎么可能在方法定义中使用接口作为类型/返回类型,何时/如何知道我应该使用某些接口作为此示例中的类型?

编辑:我真的怀疑它与yield关键字有什么关系,因为很多接口都以这种方式用作属性,例如在模型中的MVC中,并像它一样传递给Views.例:

public IEnumerable<Category> Categories {get;set;}
Run Code Online (Sandbox Code Playgroud)

c# ienumerable interface

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