正如标题所说可以在多个程序集中产生返回值?可以在多个程序集中产生返回值?
例如假设以下溶液存在:
SolutionA
|
|-Project A
|
|-Project B
如果项目B是由项目A引用,可以在项目B屈服值在项目A的方法的方法?
正如标题所说可以在多个程序集中产生返回值?可以在多个程序集中产生返回值?
例如假设以下溶液存在:
SolutionA
|
|-Project A
|
|-Project B
如果项目B是由项目A引用,可以在项目B屈服值在项目A的方法的方法?
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>
的方法,所以如果你能够调用该方法,它将“在多个程序集中产生返回值”。
迭代器块(即,包含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
的任何其他方法没有区别。
这种情况我可以直截了当地认出,但无法正式表达一半和你一样。谢谢 – samy
你为什么不试试? –
在这个过程中 - 但看到我无法找到一个具体的例子,或者我想我会提出一个问题:-) –