作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个从 msmq 队列接收消息的方法。
我在 msmq 中有 6 个不同的队列,我想要一个可以接收消息的通用方法。这个工作,但我需要为每个队列编写 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;
}
我有 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;
}
以上不工作
如何解决这个问题?
最佳答案
如果您的示例中的 T
是所有队列对象继承的某个基类,那么您可以将其传递给方法而不是 T
:
public List<QueMessage> getMessagesFromObj1Queue<T>(QueueObjBase que) { ... }
否则,如果出现所有 T
都将实现的通用接口(interface),则将其用作通用约束:
public List<QueMessage> getMessagesFromObj1Queue<T>(T que)
where T : [yourInterface]
{
}
没有对 T
的通用约束,编译器没有任何信息可以知道哪些方法或属性可用,因此只能将 T
视为 object
- 当然,它没有 RecieveAll()
方法。
关于C#泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2975649/
我是一名优秀的程序员,十分优秀!