사전의 키로 식> 식을 어떻게 사용할 수 있습니까?식 <Func<object>>을 사전의 키로 사용
방금 Expression 인스턴스로 게임을 시작했으며 원하는 작업을 수행 할 수 있는지 확실하지 않습니다.
두 개의 동일한식이 같지 않은 것 같습니다. 식을 키로 사용하여 사전에 항목을 넣을 수는 있지만 키가 포함되어 있는지 사전에 물어 보면 거짓을 반환합니다. 매우 동일한 표현식 인스턴스.
TypeToTest test = new TypeToTest();
Expression<Func<object>> expression =()=>test.PropertyA;
IDictionary<Expression<Func<object>>,bool> dictionary = new Dictionary<Expression<Func<object>>, bool>();
dictionary[expression] = true;
Assert.That (dictionary.ContainsKey(expression), Is.True);
Assert.That (dictionary.ContainsKey(()=>test.PropertyA), Is.True);
위의 마지막 줄이 실패하면 성공할 수 있습니다.
의도는 개체의 속성이나 메서드에 적용되는 규칙 집합을 정의 할 수 있으므로 예를 들어 속성을 편집 할 수 있는지 또는 사전의 특정 키가있는 값 삭제할 수 있습니다. 나는 그것이 편집 가능한지 (다른 속성에 따라 편집이 다를 수 있기 때문에) 편집 가능한 객체에 플래그를 갖고 싶지 않습니다. 그리고 삭제 가능한지 여부를 결정하는 또 다른 클래스는 관련 규칙을 유지 관리하는 책임이있는 또 다른 클래스입니다. 객체가 앞으로 확장 될 때 객체의 구성 부분의 편집 가능성/액세스 가능성/삭제 가능성을 설명하기 위해 더 많은 규칙이 추가 될 수 있습니다. 그 말이 맞는다면.
here 비슷한 게시물이 있었지만 이것이 속성 이름을 기반으로하는 것으로 보입니다. 메서드 및 인수를 키로 지정할 수 있기를 바랍니다. 따라서 객체의 editablity를 결정할 수 있습니다. 키에 기초한 사전에서.
이와 비슷한 것이 가능하거나 하늘에 파이가 있습니까?
왜 키의 좋은 선택이 아니라고 생각합니까? 잘 정의 된 동등성 검사가 없기 때문에 유형이 확장되면 (다른 인터페이스라고 말하면) –
@Sam - 각 속성/메소드가 개별적으로 제어되는 방식으로 개별적으로 제어되도록하는 것으로 보입니다. 예를 들어; 'x => x.A'는'y => y.A'와 같은 표현식입니까? 표현식이 캡처 된 변수 래퍼 인 객체 인스턴스를 캡처하면 어떻게 될까요? 이것에 대한 –
멋진 솔루션입니다. – IamStalker