2014-03-12 33 views
-2

正如標題所說可以在多個程序集中產生返回值?可以在多個程序集中產生返回值?

例如假設以下溶液存在:

SolutionA 
    | 
    |-Project A 
    | 
    |-Project B 

如果項目B是由項目A引用,可以在項目B屈服值在項目A的方法的方法?

+3

你爲什麼不試試? –

+0

在這個過程中 - 但看到我無法找到一個具體的例子,或者我想我會提出一個問題:-) –

回答

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

爲什麼不應該嗎?從外部看,迭代器只是一個返回類型爲IEnumerable<T>的方法,所以如果你能夠調用該方法,它將「在多個程序集中產生返回值」。

3

迭代器塊(即,包含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的任何其他方法沒有區別。

+0

這種情況我可以直截了當地認出,但無法正式表達一半和你一樣。謝謝 – samy