익명 메소드의 이름을 지정할 수 있습니까? 사전 (myDict<Type, List<Action<object>>>
) 안에 메서드를 저장하고 나중에 제거해야 할 필요가 있습니다. 제거를 위해 참조가 필요합니다. 각 키는 List를 가리킬 수 있기 때문에 이름. 컬렉션 내부에서 익명 메소드를 저장하고 제거하는 더 좋은 방법이 있을까요?컬렉션 내부에 저장하고 제거하기위한 익명 메소드의 이름 지정
답변
나는 당신이 원하는 것을 할 수 있다고 생각하지 않습니다. 두 개의 서로 다른 익명의 대리자는 동일한 C# 코드로 정의 된 경우에도 동일한 것으로 보장되지 않습니다. 는 C# 명세서에서 :
모든 델리게이트 타입 암시 다음 소정 비교 연산자 제공:
불리언 연산자 == (System.Delegate의 X, Y의 System.Delegate)를;
불리언 연산자 = (System.Delegate의 X, Y의 System.Delegate)! 다음과 같이
두 대표 인스턴스가 동일한 것으로 간주됩니다 : 대리자 인스턴스 중 하나가 null의 경우에만, 모두가 null의 경우
•, 그들은 동일하다.
대리인의 실행 시간 유형이 다른 경우 절대로 같지 않습니다.
두 대리자 인스턴스 모두 호출 목록 (15.1)이있는 경우 해당 호출 목록의 길이가 같고 호출 목록의 각 항목이 동일 할 경우에만 해당 인스턴스가 같습니다 (아래 정의 참조) 해당 엔트리에, 순서대로, 다른 쪽의 호출리스트에 추가합니다.
다음과 같은 규칙이 호출 목록 항목의 평등 적용 :
•이 경우, 호출 목록 항목을 모두 다음 항목이 동일한 같은 정적 메서드를 참조하십시오. 두 호출리스트 엔트리는 모두 다음의 항목이 동일한 (기준 항등 연산자에 의해 정의 됨)와 동일한 대상물의 동일한 비 정적 메소드를 참조
• 경우.
는 • 캡처 외측 가변 인스턴스 동일한 (비어) 세트와 동일한 의미 익명 함수 표현의 평가로부터 제조 호출 목록 항목이 동일 할 수있어서 (하지만, 요구되지는 않는다)된다.
here과 같이 메서드의 이름을 지정해야 할 수 있습니다.
또한 작업 목록의 맞춤형 사전 대신 이벤트 인스턴스 사전을 사용하는 것이 좋습니다. Microsoft는 여기에이 예제를 제공합니다 : How to: Use a Dictionary to Store Event Instances (C# Programming Guide).
이 방법이 될 것이다는 (하지만 방법 내부) : 당신은 람다를 especify하지 않았기 때문에
Action<object> first = delegate (object f){ Console.WriteLine(f + "first");};
Action<object> second = delegate(object s) { Console.WriteLine(s + "second"); };
Action<object> third = delegate(object t) { Console.WriteLine(t + "third"); };
Dictionary<Type, List<Action<object>>> myDict = new Dictionary<Type, List<Action<object>>>();
myDict.Add(typeof(Bar), new List<Action<object>>());
myDict[typeof(Bar)].AddRange(new[] { first, second, third });
myDict[typeof(Bar)].Remove(first);
나는 익명 메소드를 배치했다.
어떤 작업을 제거해야하는지 식별하는 방법은 무엇입니까? –
나는 대답이 '아니오'라고 생각합니다! 이후 나는이 익명의 기능에 대한 어떤 언급도하지 않았다. ... – schwarz
나는 당신이 결정하고있는 어떤 종류의 기준이 있어야한다는 것을 의미한다. –