Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to resolve Value cannot be null. Parameter name: source in linq?

Tags:

c#

linq

I don't know why I get this kind of error. It happens sometimes, and I suspicious of my code that still have thread running while I close my Application. So when I open again it happens.

Value cannot be null. Parameter name: source StackTree :    at System.Linq.Enumerable.Where[TSource](IEnumerable`1 source, Func`2 predicate)    at Susenas2015.ViewModels.Kuesioner.VMVsen15_KVal.SettingValidationAndRange(List`1 listTextBox, List`1 listCheckBox, TabControl tabControl) in d:\handita\Office\Project\Susenas 2015\Aplikasi Template Survei\Susenas2015\ViewModels\Kuesioner\VMVsen15_KVal.cs:line 430    at Susenas2015.ViewModels.Kuesioner.VMVsen15_KVal.vSen15_K_Loaded(Object sender, RoutedEventArgs e) in d:\handita\Office\Project\Susenas 2015\Aplikasi Template Survei\Susenas2015\ViewModels\Kuesioner\VMVsen15_KVal.cs:line 846    at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)    at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)    at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)    at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)    at System.Windows.BroadcastEventHelper.BroadcastEvent(DependencyObject root, RoutedEvent routedEvent)    at System.Windows.BroadcastEventHelper.BroadcastLoadedEvent(Object root)    at MS.Internal.LoadedOrUnloadedOperation.DoWork()    at System.Windows.Media.MediaContext.FireLoadedPendingCallbacks()    at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()    at System.Windows.Media.MediaContext.RenderMessageHandlerCore(Object resizedCompositionTarget)    at System.Windows.Media.MediaContext.RenderMessageHandler(Object resizedCompositionTarget)    at System.Windows.Media.MediaContext.Resize(ICompositionTarget resizedCompositionTarget)    at System.Windows.Interop.HwndTarget.OnResize()    at System.Windows.Interop.HwndTarget.HandleMessage(WindowMessage msg, IntPtr wpa` 

My code here it is

    private void SettingValidationAndRange(List<TextBox> listTextBox, List<CheckBox> listCheckBox, TabControl tabControl)         {              List<string> listNotDeclare = new List<string>();              foreach (var textB in listTextBox)             {                 if (textB.Tag != null)                     break;                  Metadata metadata = ListMetadataKor.Where(                     x => "text" + x.Field == textB.Name // this line 430                  ).FirstOrDefault();                  if (metadata == null)                 {                     if (!string.IsNullOrEmpty(textB.Name))                         listNotDeclare.Add(textB.Name);                 }                 else                 {                     metadata.TabControl = tabControl;                     textB.Tag = metadata;                 }                  textB.AddEvents();                 textB.AutomateFocus();              }              if (listNotDeclare.Count > 0)             {                 Clipboard.SetText(string.Join(",", listNotDeclare.ToArray()));                 Dialog.Info("Ada beberapa Metadata tidak ditemukan data sudah dicopy ke clipboard");             }          } 

When I start my application for my first time, it doesn't get any error. It happens when I open in 2nd or more. And if I open my application it would stuck in that code.

How I can solve this? I'm pretty sure that my Property ListMetadataKor is not null

And ListMetadataKor is instance of List<Metadata> object that I have created. It happens only in rare cases. And I don't know to solve it

UPDATE

This is my code in imageenter image description here

I fill ListMetadataKor with this code

BWHelper.Run((s, e) => {     DataTable dataMetaDataKOR = ExcelHelper.GetDataTableFromExcel(         AppConstants.FILE_METADATA, AppConstants.SHEET_METADATA_KOR     );      DataTable dataKonsistensiKOR = ExcelHelper.GetDataTableFromExcel(          AppConstants.FILE_METADATA, AppConstants.SHEET_KONSISTENSI_KOR      );      listKonsistensiKor = Tools.ToolConvert.GetKonsistensi(dataKonsistensiKOR);     listMetadataKor = Tools.ToolConvert.GetMetadata(dataMetaDataKOR);      foreach (Metadata metadata in listMetadataKor)     {         metadata.Range.ProsesRange();     }  }, (s, e) => {     try     {         kor = new VSEN15_K() { Title = "Validasi Susenas - KOR" };         kor.DataContext = new VMVsen15_KVal(rtSusenas.MasterRT, kor, this, listKonsistensiKor, listMetadataKor);         kor.PreviewKeyDown += EventsCollection.EnterAsTabPreviewKeyDown;         vmHome.HideLoading();         UpdateMetaDataEntriKOR(RTSusenas.MasterRT);         kor.ShowDialog();     }     catch (Exception Ex)     {         vmHome.HideLoading();         Dialog.Error(Ex);     } }); 

And then I throw the variable through constructor of my class

 public VMVsen15_KVal(         MasterRT masterRT,         VSEN15_K vSen15_K,         IDaftarSusenas vmDaftarRTSusenas,         List<Konsistensi> listKonsistensiKor,         List<Metadata> listMetadataKor          )     {          ListArtDetail = new ObservableCollection<ARTDetailVal>();          this.ListKonsistensiKor = listKonsistensiKor;         this.ListMetadataKor = listMetadataKor; 

My tools konsistensi like this

public static List<Konsistensi> GetKonsistensi(DataTable dataTable) {     List<Konsistensi> listMetadata = new List<Konsistensi>();     for (int i = 0; i < dataTable.Rows.Count; i++)     {         Konsistensi k = new Konsistensi();         object[] required = new object[] { DBNull.Value, "" };         k.Field = dataTable.Rows[i][FIELD].ToString();         if (string.IsNullOrWhiteSpace(k.Field)) continue;         k.Message = dataTable.Rows[i][MESSAGE].ToString();         var obj = dataTable.Rows[i][ORDER];         k.Order = !required.Contains(dataTable.Rows[i][ORDER]) ? Convert.ToInt32(dataTable.Rows[i][ORDER]) : (int?)null;         k.Page = !required.Contains(dataTable.Rows[i][PAGE]) ? Convert.ToInt32(dataTable.Rows[i][PAGE]) : (int?)null;         k.Perlakuan = dataTable.Rows[i][PERLAKUAN].ToString();         k.RelFields = dataTable.Rows[i][RELFIELDS].ToString();         k.Rule = dataTable.Rows[i][RULE].ToString();          if (dataTable.Rows[i][LEVEL].ToString().ToUpper() == ("ART"))             k.LevelKonsistensi = LevelKonsistensi.ART;         else if (dataTable.Rows[i][LEVEL].ToString().ToUpper() == ("RT"))             k.LevelKonsistensi = LevelKonsistensi.RT;         else if (dataTable.Rows[i][LEVEL].ToString().ToUpper() == ("RTWARNING"))             k.LevelKonsistensi = LevelKonsistensi.RTWarning;         else if (dataTable.Rows[i][LEVEL].ToString().ToUpper().Contains("ARTWARNING"))             k.LevelKonsistensi = LevelKonsistensi.ARTWarning;         else             k.LevelKonsistensi = LevelKonsistensi.Lain;          //k.LevelKonsistensi = dataTable.Rows[i][LEVEL].ToString().Contains("ART") ? LevelKonsistensi.ART : LevelKonsistensi.RT;         if (k.IsEmpty())             continue;          listMetadata.Add(k);     }     return listMetadata; } 
like image 915
mrhands Avatar asked Feb 16 '15 09:02

mrhands


People also ask

What is value Cannot be null parameter name source?

​​​Value cannot be null. Parameter name: InString: This error indicates that an item failed to migrate because it has corrupt MAPI properties. More specifically, Exchange Web Services (EWS) returned a MAPI property whose value should always be a non-empty string, but was returned as an empty string.

What does it mean value Cannot be null?

When processing orders you might come across the "Value cannot be null. Parameter name: value" error. This error is shown when part of your basic Billing Account setup is incomplete, and by consequence, processing is not possible until those are solved.

What is ArgumentNullException in C#?

An ArgumentNullException exception is thrown when a method is invoked and at least one of the passed arguments is null but should never be null .


1 Answers

Error message clearly says that source parameter is null. Source is the enumerable you are enumerating. In your case it is ListMetadataKor object. And its definitely null at the time you are filtering it second time. Make sure you never assign null to this list. Just check all references to this list in your code and look for assignments.

like image 116
Sergey Berezovskiy Avatar answered Sep 24 '22 08:09

Sergey Berezovskiy