gpt4 book ai didi

C#泛型方法

转载 作者:太空狗 更新时间:2023-10-30 00:22:00 27 4
gpt4 key购买 nike

我有一个从 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com