我有两个非常相似的通用方法。这个想法是可以使用显式返回类型调用一个,而另一个推断返回类型与obj
提供的相同。
第一种方法将被称为:RestResponse response = myCat.Put<RestResponse>()
//Perform a PUT on the current resource, returning the server response deserialized to a new object of the specified type.</summary>
//<typeparam name="T">The expected type of the resource post response. Use 'IRestResponse' to skip deserializing the request.</typeparam>
public static T Put<T>(this APIResource obj, List<Parameter> parameters = null)
{
if (parameters == null) parameters = new List<Parameter>();
parameters.Add(new Parameter() { Value = obj, Type = ParameterType.RequestBody });
return RequestHelper<T>(obj.collection_name + "/" + obj.id, Method.PUT, parameters);
}
自动的就是这样称呼的Cat response = myCat.Put();
//<typeparam name="O">(Automatically Inferred) The type of the current resource, which is also the expected type of the resource request response.</typeparam>
public static O Put<O>(this O obj, List<Parameter> parameters = null)
where O : APIResource
{ return obj.Put<O>(parameters); } //I want to call the first method here.
现在我可以看到这些定义在相互尊重的情况下是如何模棱两可的。奇怪的是没有编译错误,但是在运行时,我得到了堆栈溢出,因为第二种方法只是调用自己。
有没有办法让第二种方法调用第一种方法而不更改任何一种方法的名称?