ID가 int 인 여러 객체가 있습니다. 예를 들어 productId가있는 Product 클래스와 customerId가있는 Customer 클래스가 있습니다. 때로는 ID가 섞이기 쉽다고 생각합니다. 예를 들어 하스켈에서와 같이 형식 시스템에서 해당 형식을 구별하도록 솔루션을 생각해 봅니다.C# 사전의 안전성을 향상시킬 수있는 가능한 솔루션
Dictionary<int, Product> products;
Dictionary<int, Customer> customer;
Dictionary<int, List<Customer>> customersByProduct;
customerByProduct[what_id?].Add(new Customer())
을 지금 사전으로 사용 뭐죠 혼합이 사전은 가능한 사용하는 코드가있을 때 : 내가 ID로 빠른 액세스를 위해 개체를 저장 여러 사전을 때
이 문제는 가장 명백한입니다 특히 더 복잡한 사전 설정이 있고 개체의 ID가 여러 개인 경우에 유용합니다.
상황을 개선 할 수있는 몇 가지 사고 게임 나 두 가지 해결책, 그리고 기본적으로 그것을 처리하는 다른 좋은 방법이 있다면 나는 무엇을 입력하고, 그 좋은 생각이라면?
지금까지 나는 약간 혼란스러운 느낌이 들었다. 문제의 코드는 현재 작성 중입니다. 따라서 이러한 유형의 버그가 발생하더라도 알지 못하지만, 나중에 다른 개발자가 돌아와서 뭔가를 변경/추가해야 할 때 큰 위험이 있다고 생각합니다.
private struct CustomerId
{
public CustomerId(int id)
{this.id = id;}
public override string ToString()
{return id.ToString();}
public int id;
}
private enum ProductId { }
void Main()
{
var customers = new Dictionary<CustomerId, string>();
var products = new Dictionary<ProductId, string>();
customers[new CustomerId(1)] = "Customer1";
customers[new CustomerId(2)] = "Customer2";
customers[new CustomerId(3)] = "Customer3";
products[(ProductId)1] = "Product1";
products[(ProductId)2] = "Product2";
products[(ProductId)3] = "Product3";
customers.Dump();
products.Dump();
customers[new CustomerId(2)].Dump();
products[(ProductId)3].Dump();
int cid = customers.Keys.First().id;
int pid = (int)products.Keys.First();
cid.Dump();
pid.Dump();
}
id 값을 혼합하는 데 실제로 문제가 있습니까? 그렇지 않다면 결코 발생하지 않을 문제를 해결하는 데 시간을 낭비하게됩니다. –
아니요 :) 컨텍스트는 우리의 핵심 로직의 큰 덩어리가 처음부터 재 작성된다는 것을 의미합니다. 오래된 솔루션은 이러한 구조로 시작하지 않았습니다. 컴파일러가 더 많은 오류를 발견하면 더 많은 오류가 발생한다고 생각할 수 있습니다. 버그가 실제로 나타나기 전에 처음부터 구현하는 것이 가장 좋습니다. 어쨌든, 제가 왜이 질문을 쓴 이유 중 일부는 그 좋은 아이디어가 있는지 아닌지 아는 것이 었습니다. – viblo
가상의 문제를 해결하기 전에 실제 문제를 해결하는 것이 좋습니다. OTOH, 이것이 한 번 문제가된다면 어디서나 문제를 해결하는 것이 좋을 것이라고 말하고 싶습니다. 그러나 문제가 한 번 발생하기 전에. –