可以跨多个程序集生成返回值
本文关键字:返回值 程序集 | 更新日期: 2023-09-27 17:49:39
正如标题所说,是否可以跨多个程序集生成返回值?
例如,假设存在以下解决方案:
SolutionA
|
|-Project A
|
|-Project B
如果项目A引用了项目B,项目B中的方法是否可以产生项目A中的方法的值?
迭代程序块(即包含yield
关键字的方法(特定于该方法,因为从该方法之外的任何地方来看,它都与返回IEnumerable
或IEnumerator
的任何非迭代程序块没有什么不同。例如,可以说,除了"自己"之外,您不能向迭代器生成值。通过代码更容易显示:
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>
的方法,因此如果您能够调用该方法,它将"在多个程序集之间产生返回值"。