我目前正在重写自定义 RPC 机制的部分内容(无法用其他东西替换,所以请不要建议) 。调用的参数被收集在一个使用字典内部的自定义集合中。有一个方法
因此,我现在拥有的是:
由于这些限制是相互排斥的,编译器应该能够生成正确的代码(总是可以从调用站点给出的泛型类型推断出调用)。编译器会抱怨该类型已经定义了一个具有相同参数类型的成员“TryGet”。
有没有办法使这样的东西在不给两个方法不同的名称的情况下工作?
T Get<T>(string)
用于检索命名参数。对于可选参数,我想添加一个 TryGet<T>(string)
方法,如果参数不存在则返回参数或 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”。
有没有办法使这样的东西在不给两个方法不同的名称的情况下工作?