I badly understand ConcurentQueue collection. How to use Contains method in a ConcurrentQueue if T is a class or structure?
My code:
namespace lab2Form
{
struct DomainName
{
public string domainName;
public ulong domainNameCounter;
}
class LogStruct
{
public ConcurrentQueue<DomainName> domainNameQueue;
//some code
public LogStruct()
{
domainNameQueue = new ConcurrentQueue<DomainName>() { };
//some code
}
}
class CLogParser
{
LogStruct m_logStruct;
public CLogParser()
{
m_logStruct = new LogStruct();
}
public void ThreadProc(object param)
{
//...
string line;
while ((line = file.ReadLine()) != null)
{
var space_pos = line.IndexOf(' ');
if (space_pos > 0)
{
string[] parameters = line.Split(new Char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
string domainName = parameters[0];
if (m_logStruct.domainNameQueue.Contains<DomainName>(domainName))//I can't understand how to build this code-string correctly
{
}
//...
}
How to use contains method in concurrentqueue correctly?
You are passing a string while Contains method expects a DomainName. This should compile:
m_logStruct.domainNameQueue.Contains<DomainName>(new DomainName {domainName = domainName})
However this won't be very useful if you want to check for domainName equality. You can override Equals in DomainName:
struct DomainName
{
public string domainName;
public ulong domainNameCounter;
public override bool Equals(object obj)
{
if (obj is DomainName)
{
return ((DomainName) obj).domainName == domainName;
}
return false;
}
}