문제

나는 프로그램적으로 열쇠를 만들기위한 방법을 운동하려고 노력하고 있습니다. memcached, 메소드 이름과 매개 변수를 기반으로합니다. 그래서 방법이 있다면

string GetName(int param1, int param2);

돌아올 것입니다 :

string key = "GetName(1,2)";

반사를 사용하여 메소드베이스를 얻을 수 있다는 것을 알고 있지만 매개 변수 유형이 아니라 문자열에서 매개 변수 값을 어떻게 얻습니까?

도움이 되었습니까?

해결책

당신이 찾고있는 것은 인터셉터입니다. 이름이 말한 것처럼 인터셉터는 메소드 호출을 가로 채며 메소드가 호출되기 전후에 작업을 수행 할 수 있습니다. 이것은 많은 캐싱 및 로깅 프레임 워크에서 매우 인기가 있습니다.

다른 팁

반사에서 메소드 매개 변수 값을 얻을 수 없습니다. 디버깅/프로파일 링 API를 사용해야합니다. 매개 변수 이름과 유형을 얻을 수는 있지만 매개 변수 자체는 얻을 수 없습니다. 죄송합니다...

이것이 제가 생각해 낸 것입니다 (그러나 특히 효율적이지 않을 수도 있습니다).

MethodBase method = MethodBase.GetCurrentMethod();
string key = method.Name + "(";
for (int i = 0; i < method.GetParameters().Length; i++) {
  key += method.GetParameters().GetValue(i);
  if (i < method.GetParameters().Length - 1)
    key += ",";
}
key += ")";
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top