可以在多个程序集中产生返回值吗?

时间:2014-03-12 14:42:56

标签: c# yield-return

正如标题所说,可以在多个程序集中产生返回值吗?

例如,假设存在以下解决方案:

SolutionA
    |
    |-Project A
    |
    |-Project B

如果项目B引用项目B,项目B中的方法是否可以为项目A中的方法产生值?

3 个答案:

答案 0 :(得分:3)

Iterator块(即包含yield关键字的方法)特定于那个方法,在某种意义上,从该方法之外的任何地方,它都与返回一个非迭代器块的任何非迭代器块没有什么不同。 IEnumerableIEnumerator。例如,你不能为“你自己”之外的迭代器产生一个值,可以这么说。通过代码显示更容易:

public class Foo
{
    public static IEnumerable<int> Bar()
    {
        yield return 1;
        Baz();
    }

    private static void Baz()
    {
        //there's no way for me to yield a second item out of Bar here
        //the best I can do is return an `IEnumerable` and have `Bar`
        //explicitly yield each of those items
    }
}

当然,您可以从可以访问该方法的任何位置使用迭代器块。您可以从同一类中的另一个方法,同一程序集中的另一个类或另一个引用的程序集中调用Bar。对于任何这些调用者,它与返回IEnumerable的任何其他方法没有什么不同。

答案 1 :(得分:2)

Linq及其扩展方法与我使用它们的组件不同。所以是的:)(编辑:至少这是一个非常重要的理由,依靠积极。确认很快)

刚刚在控制台应用程序集和类库程序集之间确认:)

public IEnumerable<string> test()
{
     yield return "1";
     yield return "2";
     yield return "3";
     yield return "4";
}
类库中的

在控制台应用程序中是完全可调用的:

var t =new ClassLibrary1.Class1();
foreach (var test in t.test())
{
    Console.WriteLine(test);
}

答案 2 :(得分:2)

为什么不应该这样?从外部来看,迭代器只是一个返回类型为IEnumerable<T>的方法,因此,如果您能够调用该方法,它将在多个程序集中产生返回值&#34;。 / p>