I've this code :
public async static Task<T?> RequestValue1<T>(Command requestCommand)
where T : struct
{
// Whatever
}
public async static Task<T> RequestValue2<T>(Command requestCommand)
where T : class
{
// Whatever
}
我希望我的两个方法有相同的名称。这是否可能?
我的问题:
- 因为返回类型不同,我必须写两个不同的方法, 如果请求失败则返回null,如果请求成功则返回值,其中如果T是值类型,则返回
Nullable<T>
,如果T是引用类型,则返回T的实例。 async
不允许使用 ref/out,因此没有类型为T
的方法参数,无法推断出T
,我的两个方法无法具有相同的名称(签名冲突)。因为泛型约束对于解决签名冲突的情况不适用,如果没有推断出T
。
目前这段代码可以工作,但我不喜欢在“RequestValue1”和“RequestValue2”之间进行奇怪的函数调用。
RequestClass
和RequestStruct
。请注意,翻译后的内容应与原文意思相同且更易于理解,不得添加说明或其他非翻译相关的内容。 - Servyint
、double
等的RequestValue2
变体,而是使用类型参数int?
、double?
等? - Rawling:class
的注释,使用: new()
或甚至什么都不用代替。 - Rawlingnew()
也是一个不错的想法,但它排除了string
:( - Nicolas Voron