Sunullo
301
2021-07-14 14:50:46 작성 2021-07-14 14:55:28 수정됨
4
124

C# 함수에 매개변수를 보낼 때 해당 매개변수의 멤버변수를 지정할 수 있는 방법이 있을까요?


함수에 값을 지니고 있는 클래스 List를 보내서

그 클래스의 멤버변수들을 전부 비교해서

정렬한 후 특정 List에 저장해주는 함수를 만들고 싶습니다.

class NetChannel
{
    long id;
}

// 밑에 매개변수인 비교하고 싶은 멤버변수를 어떻게 지정할 수 있을지
// info는 똑같이..
public void InitData (List<T> info, 비교하고 싶은 멤버변수)
{
    //받아온 Info의 Value인 T들을 뽑아내서 지정된 멤버변수값을 비교해서 정렬해서 다른 List에 저장할 것
}

void main
{   
    List<NetChannel> lst = new List<NetChannel>();
    
    for(int i = 0; i < 99; i++)
    {
       NetChannel chan = new NetChannel();
       chan.id = 4378 * i ;
       lst.Add(chan);
    }
    InitData (lst, lst의 value인 NetChannel들의 멤버변수 id를 매개변수로 할 수 있도록 지정);//???? ㅠㅠ
}


이렇게..여튼

InitData라는 함수에 특정 List와 그 List의 멤버변수를 지정해주면

그 안에서 지정된 멤버변수값을 비교하는 식의 함수를 만들고 싶은데


이런게 가능할 방법이 있을까요??

참고로 NetChannel등의 특정 클래스들은 서버에서 프로토콜로 보내주는거라

제가 손댈 수가 없습니다.

0
  • 답변 4

  • ihangoon
    307
    2021-07-14 15:12:01 작성 2021-07-14 15:15:04 수정됨

    리플렉션을 사용하면 인스턴스 내의 특정 멤버변수 정보를 가져올 수 있습니다.

    자세한 예제는 아래 페이지 확인해 보세요.

    https://docs.microsoft.com/ko-kr/dotnet/api/system.reflection.memberinfo?view=net-5.0


    참고로 구글링해보시면 닷넷 리플렉션이 성능이 좀 별로다라는 글들이 있긴합니다.

    경험상으로는 리플렉션을 사용해서 성능에 특별히 문제는 없었습니다만... 참고가 되시길 바랍니다.


  • Sunullo
    301
    2021-07-14 17:48:31

     ihangoon // 오.. 근데..


    GetType.GetMember()를 이용해서

    MemberInfo[] 를 받아와서

    멤버의 이름은 알 수 있겠는데,

    멤버의 값을 받아오진 못하나봐요?


    구글링 해보니 FieldInfo로 바꿔서 GetValue 사용하라는데

    GetValue( 매개변수  )  << 요 안에 들어갈 매개변수가 계속 안맞는다고 에러가 뜨네요;;

  • Sunullo
    301
    2021-07-20 00:53:25

     

    ihangoon // 감사합니다 덕분에 해결했습니다ㅎㅎ
  • ihangoon
    307
    2021-07-30 12:43:02

    이제야 코멘트를 봤네요. 

    해결되셔서 다행이네요

  • 로그인을 하시면 답변을 등록할 수 있습니다.