如何在Web服务中避免错误'can-have-instance-field-initializers-in-structs-problem'

时间:2011-03-11 10:13:54

标签: c# arrays web-services struct

public struct sFr
{
    public sFe[] errorDetails;

    public sFr(sFe[] _errorDetails)
    {
        // ?? whats code to initialise the array without getting error
        // as this throws null ref when used later from client calling this webservice

        errorDetails = _errorDetails;

        // do we need to create the array of elements which we populate ?
    }
}

2 个答案:

答案 0 :(得分:3)

非常简单的修复;不要把它变成结构。

很抱歉,但结构很明显......

与公共字段一样,通常是数组(首选列表)

过度缩写的名称(如果需要控制序列化,请使用[XmlRoot("sFr"), XmlType("sFr")]之类的内容,但要使类型名称有意义。)

重新出错;语法应该只是this.fieldName = value;

我有类似的东西:

public sealed class ErrorResult
{
    private readonly List<SomeErrorType> errors = new List<SomeErrorType>();
    public List<SomeErrorType> Errors { get { return errors; } }
    public ErrorResult() {} // make explicit so never lost
}

答案 1 :(得分:1)

而不是做

sFr instance = new sFr(array_of_details);

(这是你想要做的),我认为正确的方法是:

sFr instance = new sFr();
instance.errorDetails = array_of_details;

如果你想先做,我认为你应该创建一个class而不是struct

考虑一下:当创建一个在服务器和客户端之间传递结构的Web服务时,我认为是一个无参数构造函数,因为通常的方法是创建一个实例然后对这些字段进行反序列化。