#c# #list #linq
#c# #Список #linq
Вопрос:
У меня есть 2 списка, к которым я присоединяюсь. Список 1 содержит все IP-адреса в подсети, а список 2 содержит назначенные IP-адреса.
Оба этих списка имеют одинаковую структуру. пример ниже (удалены лишние поля):
int IPAddress
int AssingmentType
В списке 1 «AssingmentType» всегда будет пустым, но в списке 2 оба поля будут заполнены, но только для назначенных IP-адресов. Я хотел бы сгенерировать полный список IP-адресов и объединить его со списком 2, показывая, когда назначен IP-адрес.
Я использую LINQ для этого и пока имею следующее
var results = from t1 in allIPinNetwork
join t2 in assignedIPs on t1.IPAddressText equals t2.IPAddressText into combinedIP
from t3 in combinedIP.DefaultIfEmpty()
select new IPAddress()
{
IpAddressText = t1.IpAddressText,
AssingmentType = t3 == null ? 0 : t3.AssingmentType,
};
Мой вопрос в том, как лучше всего обрабатывать «нулевые» значения, которые предназначены для AssingmentType? В этом случае я установил для них значение 0, но есть ли значение null, которое я могу использовать, чтобы оставить их пустыми?
В полном классе также будут некоторые строковые поля, которые могут быть пустыми.
Рад, если у кого-нибудь есть лучший способ сделать это?
Спасибо
Комментарии:
1. Использовать nullable int ?
Ответ №1:
Оба этих списка имеют одинаковую структуру.
Ну, в этом-то и проблема, похоже, у них нет структуры, в которую вы верите. Если списки могут иметь пустые AssignmentType
поля, то AssignmentType
они не могут иметь тип int
; int
всегда должно быть значение.
Вероятно, вы хотите, чтобы оба списка имели следующую структуру:
int IPAddress
int? AssignmentType
И, да, когда AssignmentType
значение не установлено, оно должно быть null
.
Другим вариантом может быть изменение AssignmentType
на перечисление:
enum IPAssignmentType
{
NotAssigned,
Dynamic,
Static,
//whatever
}
Моим последним вариантом было бы использование -1
в качестве неуказанного значения, но это просто гадость, если ее можно избежать (по сути, это то же самое, что перечисление, но более уродливое и менее управляемое).