正如標題所說可以在多個程序集中產生返回值?可以在多個程序集中產生返回值?
例如假設以下溶液存在:
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
你爲什麼不試試? –
在這個過程中 - 但看到我無法找到一個具體的例子,或者我想我會提出一個問題:-) –