2014-03-12 30 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