c#에서 Delegate를 이용해 이 함수를 좀 깔끔하게 뽑아낼 수 없을까요?

조회수 1034회
public static void TrigFunctions_Example(string pathNfilename)

    {
        FileStream fsWrite = new FileStream(pathNfilename, FileMode.Create, FileAccess.Write);
        StreamWriter sWriter = new StreamWriter(fsWrite);
        for (double angleDEG = 0.0; angleDEG <= 360.0; angleDEG += 45.0)
        {
            double angleRAD = ConvertDegreesToRadians(angleDEG);
            Console.WriteLine("Angle = {0}\xb0", angleDEG);
            sWriter.WriteLine("Angle = {0}\xb0", angleDEG);
            Console.WriteLine("Cos({0}\xb0)={1}", angleDEG, Math.Cos(angleRAD));
            sWriter.WriteLine("Cos({0}\xb0)={1}", angleDEG, Math.Cos(angleRAD));
            Console.WriteLine("Sin({0}\xb0)={1}", angleDEG, Math.Sin(angleRAD));
            sWriter.WriteLine("Sin({0}\xb0)={1}", angleDEG, Math.Sin(angleRAD));
            Console.WriteLine("Tan({0}\xb0)={1}", angleDEG, Math.Tan(angleRAD));
            sWriter.WriteLine("Tan({0}\xb0)={1}", angleDEG, Math.Tan(angleRAD));
            Console.WriteLine("Sec({0}\xb0)={1}", angleDEG, Sec(angleRAD));
            sWriter.WriteLine("Sec({0}\xb0)={1}", angleDEG, Sec(angleRAD));
            Console.WriteLine("Csc({0}\xb0)={1}", angleDEG, Csc(angleRAD));
            sWriter.WriteLine("Csc({0}\xb0)={1}", angleDEG, Csc(angleRAD));
            Console.WriteLine("Cot({0}\xb0)={1}", angleDEG, Cot(angleRAD));
            sWriter.WriteLine("Cot({0}\xb0)={1}", angleDEG, Cot(angleRAD));
        }
        sWriter.Close();
    }

보시다시피 아주 더럽게 생긴 녀석입니다.

얘들을 최대한 간략화 해보려고 하니, Cot나 Sec같은 친구들은 스트링 배열로 만들어 묶어서 처리할 수 있는데, Math.Cot(angleRAD)는 Math.스트링배열원소번호같은 식으로 손댈 수가 없더라구요. 제가 따로 정의한 Cot, Sec, Csc도 당연히 안되구요..

    public static string[] trigarr = {"Cos","Sin","Tan","Sec","Csc","Cot"};
    public static string[] hyperarr = { "Cosh", "Sinh", "Tanh", "Sech", "Csch", "Coth" };
    public static void CalcNWrite(string pathNfilename, string s)
    {
        FileStream fsWrite = new FileStream(pathNfilename, FileMode.OpenOrCreate, FileAccess.Write);
        StreamWriter sWriter = new StreamWriter(fsWrite);
        for (double angleDEG = 0.0; angleDEG <= 360.0; angleDEG += 45.0)
        {
            double angleRAD = ConvertDegreesToRadians(angleDEG);
            for (int i = 0; i < 6; i++)
            {
                Console.WriteLine(trigarr[i] + "({0}\xb0)={1}", angleDEG, trigarr[i](angleRAD)); //이부분 안통함
                sWriter.WriteLine(trigarr[i] + "({0}\xb0)={1}", angleDEG, trigarr[i](angleRAD)); //마찬가지..
            }
        }
        sWriter.Close();
    }

어떻게 하면 실제 출력하는 함수 안을 깔끔하게 처리할 수 있을까요?

힌트는 델리게이트를 이용하라.. 는 말씀 뿐이시네요 ㅠ

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 질문자가 하시려는 것은 리플렉션을 이용해야 합니다. 정영훈 2018.12.4 14:15
  • 앗.. 그러면 리플렉션을 이용하지 않으려면 어쩔 수 없이 라인별로 하나씩 WriteLine해줘야 하나요? 알 수 없는 사용자 2018.12.4 15:10
  • WriteLine 을 반복으로 처리하고 싶다는거죠? 정영훈 2018.12.4 15:15
  • 네 저기 WriteLine이 너무 자주 반복되는데, 내용은 사실 거의 차이가 없이 동일해서.. 최대한 단순화해서 가능하면 Console.WriteLine 한줄과 sWriter.WriteLine 한줄을 반복시켜서 처리할 수 있으면 했습니다 알 수 없는 사용자 2018.12.4 15:19

2 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)