'System.ArgumentNullException: Value cannot be null Parameter name: value - How to fix this error?

Please help! I am getting error in the line : details.NominalVoltage = String.Join(",", paneldetails?.NominalVoltage?.ToArray());

I have below code in my builder.

foreach (var panel in panelAddresses.Take(2))
                {
                    var paneldetails = new SM_NFPA72ReportPage1();
                    details.batteryDetails = new List<Battery>();
                 
                    var AssociatedPrimaryPowers = new Repository(new BuildConnection()).GetPanelPrimarypowerDevcies(reportInput.UseroId, panel, reportInput.BuildingId, reportInput.TestSessionId[0]).Result;
                    AssociatedPrimaryPowers.ForEach(x => paneldetails?.batteryDetails?.Add(new Battery
                    {
                        NominalVoltage = deviceDetailsList?.CustomProperty?.Where(y => y.fieldName == "nominalVoltage")?.FirstOrDefault()?.Value,
                        NominalAmps = deviceDetailsList?.CustomProperty?.Where(y => y.fieldName == "nominalAmps")?.FirstOrDefault()?.Value,
                        NominalLocation = deviceDetailsList?.CustomProperty?.Where(y => y.fieldName == "disconnectLocation")?.FirstOrDefault()?.Value,
                        Protection = deviceDetailsList?.CustomProperty?.Where(y => y.fieldName == "overCurrentType")?.FirstOrDefault()?.Value,
                        ProtectionAmps = deviceDetailsList?.CustomProperty?.Where(y => y.fieldName == "overCurrentAmps")?.FirstOrDefault()?.Value,
                        ProtectionLocation = deviceDetailsList?.CustomProperty?.Where(y => y.fieldName == "powerLocation")?.FirstOrDefault()?.Value,
                    }));
                    details.NominalVoltage = String.Join(",", paneldetails?.NominalVoltage?.ToArray());
                    details.NominalAmps = String.Join(",", paneldetails?.NominalAmps?.ToArray());
                    details.NominalLocation = String.Join(",", paneldetails?.NominalLocation?.ToArray());
                    details.Protection = String.Join(",", paneldetails?.Protection?.ToArray());
                    details.ProtectionAmps = String.Join(",", paneldetails?.ProtectionAmps?.ToArray());
                    details.ProtectionLocation = String.Join(",", paneldetails?.ProtectionLocation?.ToArray());
                }

Below attached is my model for above builder:

public class SM_NFPA72ReportPage1 : IReportModel
    {
        public string NominalVoltage { get; set; }
        public string NominalAmps { get; set; }
        public string NominalLocation { get; set; }
        public string Protection { get; set; }
        public string ProtectionAmps { get; set; }
        public string ProtectionLocation { get; set; }
        public List<Battery> batteryDetails { get; set; }
        public List<PanelDetailsInfo> panelInfo { get; set; }
    }

I am reusing the Battery model to fetch the values from repository

 public class Battery
    {
        public string NominalVoltage { get; set; }
        public string NominalAmps { get; set; }
        public string NominalLocation { get; set; }
        public string Protection { get; set; }
        public string ProtectionAmps { get; set; }
        public string ProtectionLocation { get; set; }
    }


Solution 1:[1]

The exception tells you that the parameter value is null, that should mean that:

paneldetails?.NominalVoltage?.ToArray()

...gives you a null result, and that the string.Join method does not accept it. You need to make sure that you do not provide a null value to the method.

This can be achieved in multiple ways, for example by checking for null value before calling the method:

if (panelDetails?.NominalVoltage != null)
{
    details.NominalVoltage = String.Join(",", paneldetails.NominalVoltage.ToArray());
}

or by returning a empty array by default if it is null:

details.NominalVoltage = String.Join(",", paneldetails?.NominalVoltage?.ToArray() ?? Array.Empty<string>());

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 kaffekopp