Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 避免使用C在可观察集合中添加相同的项#_C#_Observablecollection - Fatal编程技术网

C# 避免使用C在可观察集合中添加相同的项#

C# 避免使用C在可观察集合中添加相同的项#,c#,observablecollection,C#,Observablecollection,我有以下几件事: ObservableCollection<dateListModel> model = new ObservableCollection<dateListModel>(); public class dateListModel { public string dateSelected { get; set; } public string requestFor { get; set; } public int id { get;

我有以下几件事:

ObservableCollection<dateListModel> model = new ObservableCollection<dateListModel>();

public class dateListModel
{
    public string dateSelected { get; set; }
    public string requestFor { get; set; }
    public int id { get; set; }
    public string weekDay { get; set; }
}
但当我点击Add按钮时,它会显示“已经存在”消息,即使模型是空的。无论我如何在模型中添加项并尝试再次添加相同的项,它都允许添加ObservableCollection。我不想在我的模型中再次添加相同的日期。我哪里错了?

试试这个:

if (!model.Any(p => p.dateSelected.Date == myDatePicker.Date))
{
    model.Add (new dateListModel { dateSelected = string.Format("{0:yyyy-MM-dd}", myDatePicker.Date), requestFor = requestFor.Items [requestFor.SelectedIndex], id = 1, weekDay = myDatePicker.Date.DayOfWeek.ToString()});
    listview_MenuItem.ItemsSource = model;
}

最初检查数据库中是否存在具有该日期的记录时,不必将所有日期转换为相同的字符串格式。还有,
!Any…
等同于Any…==false

您可以直接比较两个日期,而无需将其转换为字符串。另外一个注意事项是,您不需要使用
.ToString()
以特定格式获取日期,当您使用时,日期将转换为字符串,然后格式将不会按预期应用。如果使用
.ToString()
,则指定format作为方法的参数(如
DateTime.Now.ToString(“yyyy-MM-dd”)

简言之,你必须改变这样的条件,使其工作

if (!model.Any(p =>p.dateSelected==myDatePicker.Date))
{

   // Add new object to the collection
}
else
   DisplayAlert ("Alert", "Already Exist!", "OK");

我使用了:if(!model.Any(p=>p.dateSelected.date==myDatePicker.date.ToString())。它不起作用。要使上述代码正常工作,DatePicker的日期格式应该是什么?如果使用
.date
,日期格式将无关紧要。因此,请从您的
myDatePicker.Date.ToString()
中删除
.ToString()
,然后重试。我还有一个输入错误,应该是
p.dateSelected.Date
而不是
p.dateSelected.Date
Hi,谢谢。我使用了:if(!model.Any(p=>Convert.ToDateTime(p.dateSelected.date)==myDatePicker.date))。工作正常。我们无法比较日期和字符串(因为p.dateselected是一个字符串)
if (!model.Any(p =>p.dateSelected==myDatePicker.Date))
{

   // Add new object to the collection
}
else
   DisplayAlert ("Alert", "Already Exist!", "OK");