用无参数构造函数初始化Struct

时间:2019-06-10 06:47:39

标签: c# struct

(我第一次)尝试使用结构,但遇到一个小问题,我不知道该如何解决。

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',我可以欺骗编译器并且警告消失,但是构造函数仍然不会触发(大概是因为它为空)。

除了将其更改为课程以外,还有其他解决方法吗?

感谢所有建议。

1 个答案:

答案 0 :(得分:0)

对于无参数构造函数-没有办法触发它。在C#结构的字段中,始终使用默认值进行初始化。

尽管有解决方法。如果您确实承诺将其保留为struct,并且希望字段默认情况下返回其他值,那么我建议您将Values转换为full属性,如果未初始化字段,则返回所需的值:< / p>

private IEnumerable<EnumDto> _values;
public IEnumerable<EnumDto> Values => _values ?? Array.Empty<EnumDto>();

话虽如此,但这并不是对结构进行操作的最佳实践。

编辑:通过@Marc Gravell建议更改了解决方案。