Question: I was wondering how should I (or can I? does it make any sense?) overload the assignment operator when working with inheritance and upcasting?
Let's say we have Base class and Derived class (inherited from Base). If i have something like:

```
/// supose we have one overloaded assignment operator in Base like Base& operator=(const Base&) and 
///one in Derived like Derived& operator=(const Derived&)...
Base* a, *b;
Derived c,d;

a = &c;
b = &d;

*a = *b  /// this will call the function in Base

```

If that calls the Base function, why should I overload "=" again in Derived? Is overloading assignment operator in Derived necessary only for working directly with objects, not upcasting (pointers) ?

Answer: 
What about something like this?

```
List<string> dirs = Directory.GetDirectories(claims, "*", SearchOption.AllDirectories)
    .Where(d => !excludeDirectories.Any(e => d.StartsWith(e)))
    .ToList();

```
This *could* be a casing issue - try changing `StartsWith()` invocation to do a case-insensitive comparison instead:

```
d => excludeDirectories.All(e =>!d.StartsWith(e, StringComparison.InvariantCultureIgnoreCase))

```