Невозможно неявно преобразовать тип 'F_M.Commitment_Ledger_Data__Public_Type' в 'F_M.Commitment_Ledger_Data__Public_Type []'

Я пытаюсь использовать функцию "Put_Ledger" в API Financial_management в Workday, но все время получаю сообщение об ошибке, когда пытаюсь добавить object[] объекту (как указано в API).

Workday не помог в решении этой проблемы. Вот образец кода. Объекты создаются, а затем добавляются к родительским объектам:

Ledger_Only_DataType ldOnly = new Ledger_Only_DataType
{
    Actuals_Ledger_ID = "1234567",
    Can_View_Budget_Date = true
};

//Commitment_Ledger_data
Commitment_Ledger_Data__Public_Type cl = new Commitment_Ledger_Data__Public_Type
{
    Commitment_Ledger_Reference = ledgerObject,
    Enable_Commitment_Ledger = true,
    Spend_Transaction_Data = st,
    Payroll_Transaction_Data = pt
};

// This is where the error occurs:
ldOnly.Commitment_Ledger_Data = cl;     

Сообщение об ошибке:

"Невозможно неявно преобразовать тип CallWorkdayAPI.Financial_Management.Commitment_Ledger_Data__Public_Type в CallWorkdayAPI.Financial_Management.Commitment_Ledger_Data__Public_Type[]"

3 ответа

Решение

Не знаком с Workday, но предполагаю

ldOnly.Commitment_Ledger_Data

Это массив:Commitment_Ledger_Data__Public_Type

Поэтому вам нужно установить его равным массиву этого типа, тогда как в настоящее время вы устанавливаете его равным одному объекту этого типа.

Ledger_Only_DataType ldOnly = new Ledger_Only_DataType
       {
           Actuals_Ledger_ID = "1234567",
           Can_View_Budget_Date = true
       };

       //Commitment_Ledger_data
       Commitment_Ledger_Data__Public_Type cl = new 
         Commitment_Ledger_Data__Public_Type
       {
           Commitment_Ledger_Reference = ledgerObject,
           Enable_Commitment_Ledger = true,
           Spend_Transaction_Data = st,
           Payroll_Transaction_Data = pt
       };

       Commitment_Ledger_Data__Public_Type[] cls = new Commitment_Ledger_Data__Public_Type[1];

       cls[0] = cl;

       ldOnly.Commitment_Ledger_Data = cls; 

Используйте списки и преобразуйте их в массив. Это легче:

    List<Commitment_Ledger_Data__Public_Type> cls = new List<Commitment_Ledger_Data__Public_Type>();

    Commitment_Ledger_Data__Public_Type cl1 = new 
         Commitment_Ledger_Data__Public_Type
       {
           Commitment_Ledger_Reference = ledgerObject,
           Enable_Commitment_Ledger = true,
           Spend_Transaction_Data = st,
           Payroll_Transaction_Data = pt
       };

    cls.Add(cl1);

   ldOnly.Commitment_Ledger_Data = cls.ToArray();

Вы можете упростить и сделать это внутри инициализатора

Сообщение об ошибке сообщает вам, в чем проблема - вы пытаетесь назначить один экземпляр Commitment_Ledger_Data__Public_Type type к объекту, представляющему массив этого типа (Commitment_Ledger_Data).

Вместо этого вы должны иметь возможность выполнять присвоение, используя массив (с единственным элементом, который вы создали в качестве его единственного члена):

ldlOnly.Commitment_Ledger_Data = new[] {cl};

Или вы можете сократить все, чтобы использовать синтаксис инициализатора:

var ldOnly = new Ledger_Only_DataType
{
    Actuals_Ledger_ID = "1234567",
    Can_View_Budget_Date = true,
    Commitment_Ledger_Data = new[]
    {
        new Commitment_Ledger_Data__Public_Type
        {
            Commitment_Ledger_Reference = ledgerObject,
            Enable_Commitment_Ledger = true,
            Spend_Transaction_Data = st,
            Payroll_Transaction_Data = pt
        }
    }
};
Другие вопросы по тегам