Невозможно неявно преобразовать тип '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
}
}
};