Как разрешить Значение не может быть нулевым. Имя параметра: источник в linq?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как разрешить Значение не может быть нулевым. Имя параметра: источник в linq?

Сообщение Anonymous »

Я не знаю, почему у меня возникает такая ошибка. Иногда это случается, и я подозреваю, что в моем коде все еще работает поток, пока я закрываю приложение. Поэтому, когда я открываю снова, это происходит.
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`

Вот мой код
private void SettingValidationAndRange(List listTextBox, List listCheckBox, TabControl tabControl)
{

List listNotDeclare = new List();

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");
}

}

Когда я запускаю приложение в первый раз, оно не вызывает никаких ошибок. Это происходит, когда я открываюсь через 2 или более раз. И если я открою свое приложение, оно застрянет в этом коде.
Как мне это решить? Я почти уверен, что мое свойство ListMetadataKor не равно нулю
А ListMetadataKor является экземпляром объекта List, который я создал. Это случается лишь в редких случаях. И я не знаю, как это решить.
ОБНОВЛЕНИЕ
Это мой код в изображении
Изображение

Я заполняю ListMetadataKor этим кодом
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);
}
});

А затем я передаю переменную через конструктор моего класса
public VMVsen15_KVal(
MasterRT masterRT,
VSEN15_K vSen15_K,
IDaftarSusenas vmDaftarRTSusenas,
List listKonsistensiKor,
List listMetadataKor

)
{

ListArtDetail = new ObservableCollection();

this.ListKonsistensiKor = listKonsistensiKor;
this.ListMetadataKor = listMetadataKor;

Мои инструменты имеют такую ​​​​консистенцию
public static List GetKonsistensi(DataTable dataTable)
{
List listMetadata = new List();
for (int i = 0; i < dataTable.Rows.Count; i++)
{
Konsistensi k = new Konsistensi();
object[] required = new object[] { DBNull.Value, "" };
k.Field = dataTable.Rows[FIELD].ToString();
if (string.IsNullOrWhiteSpace(k.Field)) continue;
k.Message = dataTable.Rows[MESSAGE].ToString();
var obj = dataTable.Rows[ORDER];
k.Order = !required.Contains(dataTable.Rows[ORDER]) ? Convert.ToInt32(dataTable.Rows[ORDER]) : (int?)null;
k.Page = !required.Contains(dataTable.Rows[PAGE]) ? Convert.ToInt32(dataTable.Rows[PAGE]) : (int?)null;
k.Perlakuan = dataTable.Rows[PERLAKUAN].ToString();
k.RelFields = dataTable.Rows[RELFIELDS].ToString();
k.Rule = dataTable.Rows[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;
}


Подробнее здесь: https://stackoverflow.com/questions/285 ... ce-in-linq
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»