मुझे उम्मीद है कि मैं एक काम करने में सक्षम हूं लेकिन मैं समझ नहीं पा रहा हूं कि यह कोड सही तरीके से क्यों काम नहीं कर रहा है और सूची में डुप्लिकेट प्रविष्टियों को जोड़ने की अनुमति क्यों दे रहा है।डुप्लिकेट सूची को रोकना <T> प्रविष्टियां
if
कथन की स्थिति कभी नहीं मिलेगी, भले ही मैं एक ही स्थान से समान फ़ाइलों को खींचूं। मुझे समझ में नहीं आता कि "इसमें शामिल" विधि उनसे मेल नहीं खा रही है।
public class Form1:Form {
private List<FileInfo> dragDropFiles = new List<FileInfo>();
private void Form1_DragDrop(object sender, DragEventArgs e) {
try {
if (e.Data.GetDataPresent(DataFormats.FileDrop)) {
string[] files =
(string[])e.Data.GetData(DataFormats.FileDrop);
OutputDragDrop(files);
}
}
catch { }
}
private void Form1_DragEnter(object sender, DragEventArgs e) {
if (e.Data.GetDataPresent(DataFormats.FileDrop))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
}
private void OutputDragDrop(string[] files) {
try {
foreach (string file in files) {
FileInfo fileInfo = new FileInfo(file);
if (dragDropFiles.Contains(fileInfo)) {
dragDropFiles.Remove(fileInfo);
}
dragDropFiles.Add(fileInfo);
}
PopulateContextMenu();
}
catch { }
}
}
मैंने सोचा कि मैं जिसमें प्राप्त करने के लिए एक और तरीका मिल गया था इस का उपयोग करते हुए "अलग"
हालांकि, ऐसा लगता checkedDragDropFiles
& dragDropFiles
डुप्लिकेट सहित प्रविष्टियों, की एक ही राशि है, को छोड़कर जब dragDropFiles
ListBox
में प्रदर्शित होता है तो यह उन्हें नहीं दिखाता है। यह ऐसा क्यों करता है?
मुझे किसी भी डुप्लिकेट सूची प्रविष्टियों को रोकने की आवश्यकता है, क्योंकि मैं सूची डेटा के आधार पर प्रोग्रामेटिक रूप से मेनू बना रहा हूं।
private void OutputDragDrop(string[] files)
{
try
{
foreach (string file in files)
{
FileInfo fileInfo = new FileInfo(file);
//if (dragDropFiles.Contains(fileInfo))
//{
// dragDropFiles.Remove(fileInfo);
//}
dragDropFiles.Add(fileInfo);
}
List<FileInfo> checkedDragDropFiles = dragDropFiles.Distinct().ToList();
debugList.DataSource = checkedDragDropFiles;
debugList2.DataSource = dragDropFiles;
//PopulateContextMenu();
}
catch { }
}
'फाइलइन्फो की वहीता क्या है, शायद आपको' विशिष्ट ' – Jodrell
को पास करने के लिए 'IEqualityComparer' लागू करना चाहिए, बस एक नोट: यदि 'युक्त' रिटर्न _true_ है, तो क्यों हटाएं और जोड़ें? नकारात्मक जांच करें और केवल तभी जोड़ें जब सूची में मूल्य नहीं है। –
Oded
ओडेड: अच्छा बिंदु, यह थोड़ी सी बर्बाद कार्रवाई है। – negligible