2017-07-06 11 views
2

私はいくつかのC++コードを書き換えるしようとしていた私は、私の六角球プロジェクトのためのC#で、インターネット上で見つけたが、私は次のコードに走った:C#の同等::ベクトル<int> .END()

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は構造体です。

+0

カスタム検索を使用しないでください。 linqの 'Where'を使用してください。 'var relevantElements = myList.Where(o => conditionSatisfied(o)); ' –

+3

C#はC++とは異なる言語です。これは、異なる構築物と異なるイディオムを必要とする。 「終わり」は、ドイツ語の多くの文章が英語の同じ文章に直接翻訳されないように、直接翻訳されることはありません。 –

+2

そのコードは、アイテムがリストに存在するかどうかをチェックしています。 C#では:if(... &&!nbrs.Contains(ti.m_hexA)){nbrs.Add(ti.m_hexA); }; ' –

答えて

1

全体構成:

nbrs.FirstOrDefault(i => i == ti.m_hexA) == null 

又は

!nbrs.Any(i => i == ti.m_hexA) 

((*ti)->m_hexA)ti.m_hexAのと等価である:

(find(nbrs. begin(), nbrs.end(), ((*ti)->m_hexA)) == nbrs.end()) 

はきゅうを使用してC#で記述することができます。