I have a method that receives messages from a queue of msmq.
I have 6 different queues in msmq and i d like a single generic method that would receive the messages. THis work, but i need to write 6 methods for each queue. I d like to make it more generic.
public List<QueMessage> getMessagesFromObj1Queue()
{
List<QueMessage> messageList = new List<QueMessage>();
QueObj1 que = new QueObj1();
while (que.ReceiveAll().Count > 0)
{
varmessage = que.Receive(new TimeSpan(0, 1, 0));
messageList.Add(message);
}
return messageList;
}
I have 5 different object which just extends a single abstract class. Below doenst work.
public List<QueMessage> getMessagesFromObj1Queue<T>(T que)
{
List<QueMessage> messageList = new List<QueMessage>();
while (que.ReceiveAll().Count > 0)
{
varmessage = que.Receive(new TimeSpan(0, 1, 0));
messageList.Add(message);
}
return messageList;
}
Above doesnt work
how to fix this?
If T in your example is some base class that all queue objects inherit, then you can just pass that to the method instead of T:
public List<QueMessage> getMessagesFromObj1Queue<T>(QueueObjBase que) { ... }
Otherwise, if there's come common interface that all T's will implement, use that as a generic constraint:
public List<QueMessage> getMessagesFromObj1Queue<T>(T que)
where T : [yourInterface]
{
}
Without a generic constraint on T, the compiler doesn't have any information to know what method or properties are available, and so can only treat T as object - which, of course, doesn't have a RecieveAll() method.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With