2014-03-12 2 views
-2

제목에서 말한대로 여러 어셈블리에서 반환 값을 얻을 수 있습니까?여러 어셈블리에서 반환 값을 얻을 수 있습니까?

는 예를 들어 가정 다음과 같은 솔루션은 존재합니다

SolutionA 
    | 
    |-Project A 
    | 
    |-Project B 

프로젝트 B는 프로젝트 A로 참조하는 경우, 수있는 프로젝트 A의 방법에 프로젝트 B 수율 값의 방법은?

+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 키워드를 포함하는 방법) 어디서나 메소드 외부 그것이 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을 반환하는 다른 메소드와 다를 바 없습니다.

+0

이것은 내가 겉으로 드러내고 인식 할 수있는 상황입니다. 아직 공식적으로 절반을 표현할 수 없었습니다. 감사 – samy

관련 문제