MultiDictionary implementation C#
couple of points from my side:


If you add same TKey instance to your List it will be added only
once. But if you add other instance of TKey but with the same
'content' the end result of Add method is dictionary with two keys with same content and two
lists. Is that part of requirement?


Example:

public class Foo
{
    public string X;
    public int Y;

    public Foo(string x, int y)
    {
        X = x;
        Y = y;
    }
}

var multiDict = new MultiDict&lt;Foo, string&gt;();

var firstFoo = new Foo("abc", 1);
multiDict.Add(firstFoo, "someValue1");
multiDict.Add(firstFoo, "someValue2");

var secondFoo = new Foo("abc", 1);
multiDict.Add(secondFoo, "someValue3");



Similar problem is for TValue, but it's related with removing elements. Solution for both cases is implementing IEqualityComparer for both TKey and TValue and force class user to inject it via constructor and use [THIS] dictonary constructor. That will guarantee uniqueness for your key. Please keep in mind that you should also use RemoveAll method on list to be sure that all elements that matches predicate are removed. 
You're incosistent with indentations of methods, curly brackets,
whitespaces between methods. Please clean that up.
I don't see the point of Entry struct. You can easily get rid of it
and put all methods in MultiDictionary class itself.
I would consider to change interface to more 'detailed' interface.
What I mean by that? Let's say that Remove returns count of elements
actually removed. Point only to consideration.
I will change implementation of Add method to something different,
because you always (when key exists in dictionary or not) seeking
through dictionary twice: first time is on TryGetValue method and
second while attaching list to key. Attaching list to key is
necessary only when you're creating new one.