Q:

Как релизовать обобщённый метод для определённого типа данных?

На С++ я задавала реализацию функции для определённого типа данных и общую для всех остальных. Попытка сделать так же на C# выдаёт мне ошибку компиляции Type 'SomeType' already defines a member called 'SomeGenericMethod' with the same parameter types. Неужели нельзя задать тип возвращаемого значения для метода, используя обобщения? Ответы в этой ссылке https://stackoverflow.com/questions/12959957/c-specialized-template-method-error-type-already-defines-a-member-cal не удовлетворили меня. Как по мне, они костыльные.
private T SomeGenericMethod<T>()
{
    // реализация для большинства типов
} 

private T SomeGenericMethod<T>() where T: myDataType
{
    // реализация в случае если T - myDataType
}

A:

Согласно спецификации языка (пункт 3.6), в сигнатуру не входят ни тип возвращаемого значения, ни тип-параметр обобщенного метода, ни какие-либо ограничения на тип-параметр. 
Таким образом, с точки зрения компилятора, ваши методы неразличимы, т.к. имеют одинаковые имена и наборы входных параметров. В вашем примере входных параметров нет, следовательно будут учитываться только имена. Обобщенные типы C# похожи, но не эквивалентны шаблонам C++. 
Вам необходимо

либо иметь два метода с различными сигнатурами (в
приведенном примере - различными именами), если они являются членами
одного класса/структуры, 
либо разнести их в разные классы/структуры с общим предком или
интерфейсом,
либо определить два интерфейса с данной сигнатурой метода и
использовать явную реализацию интерфейсов в классе/структуре,
либо воспользоваться одним из решений по приведенной вами ссылке.

