我试图为我的六角球项目重写一些在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

09-06 21:52