C# 等效于 C++ std::vector<int>.end()
C# equivalent of C++ std::vector<int>.end()
我试图用 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()
的文档。文档说它 returns 是一个指向迭代器末尾的 "place holder" 插槽的迭代器,并且尝试访问它会导致 "undefined behaviour"。这样做:
1.) 意思是在我的 C# 中,当处理与 end()
元素进行比较的常规对象时,我应该将该对象与 null
?
进行比较
2.) 对于整数和其他原语,我应该只与标记值(例如 -1)进行比较吗?
上述c++源码中,nbrs是一个std::vector,m_hexA是一个int,ti是一个struct。
整体建设:
(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
.
我试图用 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()
的文档。文档说它 returns 是一个指向迭代器末尾的 "place holder" 插槽的迭代器,并且尝试访问它会导致 "undefined behaviour"。这样做:
1.) 意思是在我的 C# 中,当处理与 end()
元素进行比较的常规对象时,我应该将该对象与 null
?
2.) 对于整数和其他原语,我应该只与标记值(例如 -1)进行比较吗?
上述c++源码中,nbrs是一个std::vector,m_hexA是一个int,ti是一个struct。
整体建设:
(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
.