C#에서 익명 대리자 목록을 만들 수 있습니까?목록이 <T>인데 여기서 T는 익명의 대리인입니까?
이Action<int> method;
List<method> operations = new List<method>();
C#에서 익명 대리자 목록을 만들 수 있습니까?목록이 <T>인데 여기서 T는 익명의 대리인입니까?
이Action<int> method;
List<method> operations = new List<method>();
당신이 쓸 수, 예를
Action<int> method = j => j++;
List<Action<int>> operations = new List<Action<int>>();
operations.Add(method);
operations.Add(i => i++);
그것은 같은 특정 대리자 형식의 목록을 만들 확실히 가능성에 대해 : 여기에 코드를 내가 쓰고 싶지만이 컴파일되지 않습니다이다 액션 또는 Func 또는 기타 익명의 대리자는 호환 가능한 서명이있는 모든 대리자 형식으로 캐스팅 할 수 있으므로 호환 가능한 서명이있는 한 대리자 목록을 만들 수 있습니다.
여러 종류의 서명이있는 대리인 목록을 만드는 것이 유용하지 않을 수 있습니다. 지정되지 않은 서명을 사용하면 대리인을 호출하기가 매우 어려워 질 것이기 때문입니다. 그래도 반성으로 그렇게 할 수 있어야합니다. 이 경우 객체 목록 만 사용할 수 있습니다.
코드에 문제가있어서 인스턴스를 List에 대한 형식 인수로 지정하려고합니다.
Action<int> method
이 인스턴스 인 반면, Action<int>
은 유형입니다.
다른 포스터에서 언급 한 것처럼 유형 목록을 유형 매개 변수로만 Action<int>
으로 선언하면됩니다.
특정 위임보다 좀 더 유연한 뭔가를해야 할 경우
var myNum = 5;
var myops = new List<Action<int>>();
myops.Add(j => j++);
myops.Add(j => j++);
foreach(var method in myops)
{
Console.WriteLine(method(myNum));
}
// Frowned upon, but fun syntax
myops.Each(method => method(myNum));
왜 눈살을 찌푸 리지 않습니까? – recursive
일부 사람들은 이러한 종류의 목록 내포를 부작용이있는 작업과 함께 사용하지 않아야한다고 생각합니다. 이와 같은 각 방법에는 본질적으로 부작용이 있습니다. – Joren
@Joren : LINQ 표현식 (이해력 표현식 포함)은 부작용만으로는 게으른 특성 때문에 문제가 있습니다. 그러나 익명 메서드 및 람다 식은 LINQ에 대한 것만이 아니며 일반적으로 순수하게 작동하도록 제한 할 이유가 없습니다. 그래서, IMO,'List
,이 질문에 대한 답변에 정의 된 위임 한 번 봐 가지고하려고 : http://stackoverflow.com/questions/1184329/function-pointers -in-c –