Dar*_*der 4 .net c# generics message-queue
我有一个从msmq队列接收消息的方法.
我在msmq中有6个不同的队列,id就像一个接收消息的通用方法.这是工作,但我需要为每个队列编写6个方法.我想让它更通用.
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;
}
Run Code Online (Sandbox Code Playgroud)
我有5个不同的对象,它只扩展了一个抽象类.下面的工作.
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;
}
Run Code Online (Sandbox Code Playgroud)
以上不起作用
怎么解决这个问题?
如果T在您的示例中是所有队列对象继承的某个基类,那么您只需将其传递给方法而不是T:
public List<QueMessage> getMessagesFromObj1Queue<T>(QueueObjBase que) { ... }
Run Code Online (Sandbox Code Playgroud)
否则,如果所有人都T将实现通用接口,请将其用作通用约束:
public List<QueMessage> getMessagesFromObj1Queue<T>(T que)
where T : [yourInterface]
{
}
Run Code Online (Sandbox Code Playgroud)
如果没有通用约束T,编译器就没有任何信息可以知道哪些方法或属性可用,因此只能T视为object- 当然,它没有RecieveAll()方法.