回答編集履歴

2

修正

2019/03/15 07:31

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -138,9 +138,7 @@
138
138
 
139
139
  return true;
140
140
 
141
- else
142
-
143
- return false;
141
+ return false;
144
142
 
145
143
  }
146
144
 

1

ついき

2019/03/15 07:31

投稿

papinianus
papinianus

スコア12705

test CHANGED
@@ -29,3 +29,141 @@
29
29
 
30
30
 
31
31
  という感じでどうでしょうか。
32
+
33
+
34
+
35
+ ---
36
+
37
+ ```csharp
38
+
39
+ using System;
40
+
41
+ using System.Collections.Generic;
42
+
43
+ using System.Linq;
44
+
45
+ using System.IO;
46
+
47
+
48
+
49
+ namespace ConsoleApp
50
+
51
+ {
52
+
53
+ class Program
54
+
55
+ {
56
+
57
+ static void Main(string[] args)
58
+
59
+ {
60
+
61
+ var targetDir = new DirectoryInfo("./watching");
62
+
63
+ var fileT0 = targetDir.EnumerateFiles().Select(x=> new SampleClass() {Name = x.FullName, ModifiedAt = x.LastAccessTime }).ToArray();
64
+
65
+ var fileT1 = targetDir.EnumerateFiles().Select(x => new SampleClass() { Name = x.FullName, ModifiedAt = x.LastAccessTime }).ToArray();
66
+
67
+ var removed = fileT0.Except(fileT1).ToArray();
68
+
69
+ var added = fileT1.Except(fileT0).ToArray();
70
+
71
+ var modified = fileT0.Intersect(fileT1).Except(fileT1,new SampleClassEqualityComparer()).ToArray();
72
+
73
+ Console.ReadKey();
74
+
75
+ }
76
+
77
+ }
78
+
79
+ class SampleClass : IEquatable<SampleClass>
80
+
81
+ {
82
+
83
+ public string Name { get; set; } = string.Empty;
84
+
85
+ public DateTime ModifiedAt { get; set; } = default(DateTime);
86
+
87
+
88
+
89
+ public override bool Equals(object obj)
90
+
91
+ {
92
+
93
+ return Equals(obj as SampleClass);
94
+
95
+ }
96
+
97
+
98
+
99
+ public bool Equals(SampleClass other)
100
+
101
+ {
102
+
103
+ return other != null &&
104
+
105
+ Name == other.Name;
106
+
107
+ }
108
+
109
+
110
+
111
+ public override int GetHashCode()
112
+
113
+ {
114
+
115
+ return 539060726 + EqualityComparer<string>.Default.GetHashCode(Name);
116
+
117
+ }
118
+
119
+ }
120
+
121
+ class SampleClassEqualityComparer : IEqualityComparer<SampleClass>
122
+
123
+ {
124
+
125
+ public bool Equals(SampleClass s1, SampleClass s2)
126
+
127
+ {
128
+
129
+ if (s2 == null && s1 == null)
130
+
131
+ return true;
132
+
133
+ if (s1 == null || s2 == null)
134
+
135
+ return false;
136
+
137
+ if (s1.Name == s2.Name && s1.ModifiedAt == s2.ModifiedAt)
138
+
139
+ return true;
140
+
141
+ else
142
+
143
+ return false;
144
+
145
+ }
146
+
147
+
148
+
149
+ public int GetHashCode(SampleClass s)
150
+
151
+ {
152
+
153
+ var hashCode = -22583235;
154
+
155
+ hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(s.Name);
156
+
157
+ hashCode = hashCode * -1521134295 + s.ModifiedAt.GetHashCode();
158
+
159
+ return hashCode;
160
+
161
+ }
162
+
163
+ }
164
+
165
+
166
+
167
+ }
168
+
169
+ ```