我目前正在重写自定义 RPC 机制的一部分(不能用其他东西代替,所以不建议这样做 ;-))。调用的参数收集在内部使用字典的自定义集合中。有一种方法T Get<T>(string)
检索命名参数。对于可选参数,我想添加一个 TryGet<T>(string)
返回参数或 null
的方法如果它不存在,那么调用代码可以使用 null 合并运算符提供默认值。当然,对于值类型这不起作用,但我可以使用 T?
相反,这正是我想要的。
所以我有这个:
public class Arguments
{
// lots of other code here
public T TryGet<T>(string argumentName) where T : class
{
// look up and return value or null if not found
}
public T? TryGet<T>(string argumentName) where T : struct
{
// look up and return value or null if not found
}
}
有了它,我希望能够执行以下操作:
return new SomeObject(
args.TryGet<string>("Name") ?? "NoName",
args.TryGet<int>("Index") ?? 1
);
由于约束是互斥的,编译器应该能够生成正确的代码(总是可以从调用站点给出的泛型类型推断出调用)。编译器提示该类型已经定义了一个名为“TryGet”的具有相同参数类型的成员。
有没有办法在不给这两种方法不同的名称的情况下使这样的事情起作用?
最佳答案
Constraints are not part of the signature.因此,您的问题的答案是否。
关于c# - 具有相同名称和参数但不同结果和约束的多个泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2271776/