我有两个要加入的列表。列表1包含子网中的所有IP,列表2包含分配的IP。
这两个列表的结构相同。以下示例(删除了额外字段(:
int IPAddress
int AssingmentType
在列表1中;分配类型";将始终为空,但在列表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,但是否有一个空值可以用来将它们留空?在完整类中,还会有一些字符串字段可能为空。
如果有人能找到更好的方法,我会高兴吗?
感谢
这两个列表具有相同的结构。
好吧,这就是问题所在,它们似乎没有你认为的结构。如果列表可以有空的AssignmentType
字段,那么AssignmentType
就不能是int
类型;int
必须始终是一个值。
你可能想要的是,这两个列表都有以下结构:
int IPAddress
int? AssignmentType
是的,当未设置AssignmentType
时,它应该是null
。
另一种选择可能是将AssignmentType
更改为枚举:
enum IPAssignmentType
{
NotAssigned,
Dynamic,
Static,
//whatever
}
我的最后一个选择是使用-1
作为未设计的值,但如果可以避免的话,那就太糟糕了(它本质上与枚举相同,但更丑陋,更不易维护(。