최근에, 나는 문 Dictionaries
대신에 1-1 관계를 매핑하는 것을 선호하게되었습니다 Switch
. 쓰기가 조금 더 빠르고 정신적으로 처리하기가 더 쉽다는 것을 알게되었습니다. 불행히도 객체의 새 인스턴스에 매핑 할 때 다음과 같이 정의하고 싶지 않습니다.
var fooDict = new Dictionary<int, IBigObject>()
{
{ 0, new Foo() }, // Creates an instance of Foo
{ 1, new Bar() }, // Creates an instance of Bar
{ 2, new Baz() } // Creates an instance of Baz
}
var quux = fooDict[0]; // quux references Foo
그 구조가 주어지면 CPU 사이클과 3 개의 객체를 만드는 메모리를 낭비하고 생성자가 포함 할 수있는 것을 수행하고 그중 하나만 사용했습니다. 또한 fooDict[0]
이 경우 다른 객체를 매핑 하면 Foo
의도 한대로 새 인스턴스를 만드는 것이 아니라 동일한 것을 참조하게 됩니다. 해결책은 대신 람다를 사용하는 것입니다.
var fooDict = new Dictionary<int, Func<IBigObject>>()
{
{ 0, () => new Foo() }, // Returns a new instance of Foo when invoked
{ 1, () => new Bar() }, // Ditto Bar
{ 2, () => new Baz() } // Ditto Baz
}
var quux = fooDict[0](); // equivalent to saying 'var quux = new Foo();'
이것이 너무 혼란스러운 지점에 도달하고 있습니까? 결국에는 놓치기 쉽습니다 ()
. 아니면 함수 / 표현에 매핑하는 것이 일반적인 관례입니까? 대안은 스위치를 사용하는 것입니다.
IBigObject quux;
switch(someInt)
{
case 0: quux = new Foo(); break;
case 1: quux = new Bar(); break;
case 2: quux = new Baz(); break;
}
어떤 호출이 더 허용됩니까?
- 빠른 검색 및 더 적은 키워드 (대소 문자 구분)를위한 사전
- 스위치 : 코드에서 더 일반적으로 발견되며 간접적으로 Func <> 객체를 사용할 필요가 없습니다.
fooDict[0] is fooDict[0]
. 람다와 스위치를 함께 사용하는 경우는 그렇지 않습니다.