我试图为我的六角球项目重写一些在C#网上找到的C++代码,但是遇到了以下代码:
if((((*ti)->m_hexA) != tileNdx) && (find(nbrs. begin(), nbrs.end(), ((*ti)->m_hexA)) == nbrs.end()))
{
nbrs.push_back(((*ti)->m_hexA));
}
我大部分将其转换为C#。我什至构建了自己的
Find<T>(List<T> list, T value)
方法,该方法实现了与std::find相同的基本功能。我仍然不确定
std::vector<T>::end()
的文档。文档说它返回一个迭代器,该迭代器指向迭代器末尾的“占位符”插槽,并且尝试访问它会导致“未定义的行为”。做这个:1.)意味着在我的C#中,当处理与
end()
元素进行比较的常规对象时,我应该将对象与null
进行比较?2.)对于整数和其他基元,我是否应该与诸如-1之类的前哨值进行比较?
在上面的c++源代码中,nbrs是std::vector,m_hexA是int,ti是结构。
最佳答案
整体施工:
(find(nbrs. begin(), nbrs.end(), ((*ti)->m_hexA)) == nbrs.end())
可以使用LinQ用C#编写:
nbrs.FirstOrDefault(i => i == ti.m_hexA) == null
要么
!nbrs.Any(i => i == ti.m_hexA)
其中
((*ti)->m_hexA)
等于ti.m_hexA
。