(我第一次)尝试使用结构,但遇到一个小问题,我不知道该如何解决。
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
if(details.method == "POST")
// Use this to decode the body of your post
var postedString = decodeURIComponent(String.fromCharCode.apply(null,
new Uint8Array(details.requestBody.raw[0].bytes)));
console.log(postedString)
},
{urls: ["<all_urls>"]},
["blocking", "requestBody"]
);
问题与无参数构造函数有关。
我想在实例化该结构时初始化import com.rabbitmq.jms.admin.RMQConnectionFactory;
import javax.jms.*;
/**
* docker run -d --hostname my-rabbit --name
* some-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3-management
*/
public class RabbitMqConsumer {
public static void main(String[] args) throws Exception {
RMQConnectionFactory connectionFactory = new RMQConnectionFactory();
connectionFactory.setUsername("guest");
connectionFactory.setPassword("guest");
connectionFactory.setVirtualHost("/");
connectionFactory.setHost("localhost");
connectionFactory.setPort(5672);
connectionFactory.setDeclareReplyToDestination(false);
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("TEST-QUEUE");
drainQueue(session, queue);
}
protected static void drainQueue(Session session, Queue queue) throws Exception {
MessageConsumer receiver = session.createConsumer(queue);
Message msg = receiver.receiveNoWait();
while (msg != null) {
String msgBody = ((TextMessage) msg).getText();
System.out.println("recieved" + msgBody);
msg = receiver.receiveNoWait();
}
}
}
属性,但是public struct TextSelect<TEnum> where TEnum : Enum
{
public TextSelect(string input = "")
{
Input = input;
Values = EnumDto.ToList<TEnum>();
}
public string Input { get; set; }
public IEnumerable<EnumDto> Values { get; }
}
public TextSelect<IndustryType> Industry = new TextSelect<IndustryType>();
是一种类型,而不是实例值,因此不算作参数。
这样,如果构造函数没有参数,我会收到编译器警告。
如果我添加一个可选值'Input',我可以欺骗编译器并且警告消失,但是构造函数仍然不会触发(大概是因为它为空)。
除了将其更改为课程以外,还有其他解决方法吗?
感谢所有建议。
答案 0 :(得分:0)
对于无参数构造函数-没有办法触发它。在C#结构的字段中,始终使用默认值进行初始化。
尽管有解决方法。如果您确实承诺将其保留为struct
,并且希望字段默认情况下返回其他值,那么我建议您将Values
转换为full属性,如果未初始化字段,则返回所需的值:< / p>
private IEnumerable<EnumDto> _values;
public IEnumerable<EnumDto> Values => _values ?? Array.Empty<EnumDto>();
话虽如此,但这并不是对结构进行操作的最佳实践。
编辑:通过@Marc Gravell建议更改了解决方案。