2013-11-21 3 views
2

함수를 전달할 수 있습니까 (예 : sin())를 문자열로 전달한 다음 int로 사용할 수 있습니까?C# 함수로 문자열을 함수로 전달하는 방법

처럼 : (주요 아이디어 만)

public int getfunc(String func) 
{ 
    return res_of(func) 
} 

내가의 문자열로 장난 시도 "으로, Math.sin (0)" 하지만 내가 할 수있는 0 ...

를 인쇄 할 수 있습니다 함수는 함수가 int 값을 전달하기 만하면되므로 수학 함수를 미리 정의해야합니다. 그러나 함수를 더 일반적으로 유지할 수있는 방법이 있다고 생각합니다.

동적으로 유지하려는 기능 매핑을 사용하고 싶지 않습니다. 그렇게하는 방법이 있습니까?

+2

문자열을 전달하고 해당 문자열을 코드에서 실행하겠습니까? –

+2

그래서'Actions'와'Func's를 사용하고 싶지 않으십니까? –

+0

어쩌면 이것을 사용하려는 의도의 예를 제시해야 할 것입니다. 어쩌면 더 좋은 방법이 있거나 적어도 우리가 당신의 필요를 조금 더 이해할 수 있도록 도와 줄 것입니다. – musefan

답변

3

를 사용하여.

문자열을 전달하는 대신 대리자를 사용할 수 있습니다. 그런 식으로, 당신은 어떤 반성이 필요하지 않습니다.

C#에 미리 정의 된 대리자 형식 인 Func<>이 있습니다.이 형식을 사용하면 대리자로 전달할 메서드의 반환 형식과 매개 변수 형식을 쉽게 정의 할 수 있습니다. Math.Sin() 더블을 반환하고 이중 매개 변수를 사용하기 때문에

예를 들어, Math.Sin(double)에 대한 Func<>Func<double, double> 될 것이다. 이런 식으로 사용 그런

public int DoCalculation(Func<double, double> func, double a) 
    { 
     return Convert.ToInt32(func(a)); 
    } 

:

using System; 

namespace Demo 
{ 
    internal class Program 
    { 
     private void run() 
     { 
      Func<double, double> f1 = Math.Sin; 
      Func<double, double> f2 = Math.Cos; 

      double r1 = runFunc(f1, 1.0); 
      double r2 = runFunc(f2, 2.0); 

      Console.WriteLine(r1); 
      Console.WriteLine(r2); 
     } 

     private static double runFunc(Func<double, double> func, double parameter) 
     { 
      return func(parameter); 
     } 

     private static void Main() 
     { 
      new Program().run(); 
     } 
    } 
} 
2

보십시오 당신이 생각하지 수있는 다른 방법을 제공하고자 http://www.csscript.net/

dynamic script = CSScript.Evaluator 
         .LoadCode(@"using System; 
            public class Script 
            { 
             public int Sum(int a, int b) 
             { 
              return a+b; 
             } 
            }"); 
int result = script.Sum(1, 2); 
+0

불행히도 우리는 스크립트를 배우지 않았으므로 스크립트를 사용할 수 없습니다. ( 아무튼 나는 작동시키지 않습니다. 나는이 도구들 중 하나를 배웠지 만 새로운 생각의 방법 인 것처럼 그것에 대해 놀 것입니다. – user2893825

1

이 같은 방법을 선언 :

예는이 명확하게됩니다 우리의 응용 프로그램에서

int result = DoCalculation(Math.Sin, 3.3); 
0

을 우리가 사용하는 .NET 통합 C# 컴파일러.
이 작업은 구현하기 쉽지만 간단합니다.

Here's an answer 자세한 내용은 여기를 참조하십시오.
우리는 이것을 우리 회사 생산에서 사용합니다.

관련 문제