Как избежать ошибки «не может иметь-экземпляр-поля-инициализаторы-в-структуре-проблемы» в веб-сервисе - PullRequest
0 голосов
/ 11 марта 2011
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 ]

3 голосов
/ 11 марта 2011

Очень простое исправление; не делайте это структурой.

Извините, но структура здесь просто неправильная ...

Как и открытые поля, а обычно массивы (списки предпочтений)

И чересчур сокращенные имена (используйте такие вещи, как [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 голос
/ 11 марта 2011

Вместо того, чтобы делать

sFr instance = new sFr(array_of_details);

(это то, что вы пытаетесь сделать), я думаю, что правильный путь будет:

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

Если вы хотите сделатьво-первых, я думаю, что вы должны создать class вместо struct.

Если подумать об этом: при создании веб-службы, передающей структуру между сервером и клиентом, я думаю, что ожидается конструктор без параметровПоскольку обычный способ заключается в том, что экземпляр создается, а затем поля десериализуются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...