표현식 트리에는 선택적 인수를 사용하는 호출 또는 호출이 포함되지 않을 수 있습니다


145

표현식 트리에는 선택적 인수를 사용하는 호출 또는 호출이 포함되지 않을 수 있습니다

return this.RedirectToAction<MerchantController>(x => x.Edit(merchantId));

편집에 두 번째 널 입력 가능 인수가있는 경우

왜 이런거야?

답변:


106

기본 식 트리 API는 선택적 인수를 지원하지 않습니다.

IL 컴파일 된 코드의 경우 CLR 컴파일러는 인수가 명시 적으로 제공되지 않은 경우 선택적 인수를 사용하여 메서드를 호출하는 것을 지원하지 않기 때문에 컴파일 타임에 기본값 (하드 코딩 됨)을 삽입합니다.


2
과부하가 포함되어 있습니까? 과부하를 만들 때이 문제가 발생했습니다. void Blah (string a) 및 void Blah (object a)와 같은 것. 객체로 버전에 대한 호출을 MOQ로 만들려고 할 때이 오류가 발생했습니다.
vbullinger

4
특정 과부하가 트리에 하드 코딩 될 것이라는 점에서 과부하가 완전히 지원됩니다.
usr

1
꽤 암호 오류 메시지이지만이 대답은 방법을 보여주었습니다. 메소드에 매개 변수를 사용하는 방법에 대한 기본값은 모의하려고합니다.
vpalmu

140

Mock.setup을 사용하여 여러 기본 매개 변수가있는 메소드를 조롱하려고 할 때 동일한 메시지가 나타났습니다. 람다에 추가 매개 변수를 추가해야했습니다.

void someMethod(string arg1 = "", string arg2 = "")

mockedObject.Setup(x => x.someMethod(It.IsAny<string>(), It.IsAny<string>()))

1
이것은 나를 도왔다. 나는 빠졌다 It.IsAny<object>. 기본적으로someMethod()
akasoggybunz에

또한 메소드에 모든 매개 변수의 값을 포함시켜야합니다 (기본 값이 설정된 메소드 서명에 여러 매개 변수가 있음에도 불구하고).
slashNburn

1
사용 사례에 따라 ... x.someMethod(default,default)... 도 사용할 수 있습니다.
LosManos
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.