正如标题所说,可以在多个程序集中产生返回值吗?
例如,假设存在以下解决方案:
SolutionA
|
|-Project A
|
|-Project B
如果项目B引用项目B,项目B中的方法是否可以为项目A中的方法产生值?
答案 0 :(得分:3)
Iterator块(即包含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
的任何其他方法没有什么不同。
答案 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>