C'est bon. J'ai trouvé une alternative.
Je modifie la classe abstraite MyClass et la signature de la méthode GetKeySelector, comme ci-dessous. Dès lors, je peux caster string en String et les messages d'erreurs disparaissent. Un peu tordu tout de même.
public abstract class MyClass<T, key> : IMyClass<T> where T : class, new()
{
public abstract Func<T, key> GetKeySelector();
}
public class MyClassB : MyClass<DataA, string>
{
public override Func<DataA, String> GetKeySelector()
{ return new Func<DataA, String>(k => k.Name); }
}