可以跨多个程序集生成返回值

本文关键字:返回值 程序集 | 更新日期: 2023-09-27 17:49:39

正如标题所说,是否可以跨多个程序集生成返回值?

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

SolutionA
    |
    |-Project A
    |
    |-Project B

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

可以跨多个程序集生成返回值

迭代程序块(即包含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的任何其他方法没有什么不同。

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);
}

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