c# - 具有相同名称和参数但不同结果和约束的多个泛型方法

标签 c# generics constraints

我目前正在重写自定义 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/

相关文章:

C# 变量名转字符串

java - 使用泛型的 Map.put

Go 泛型 : Invalid composite literal

mysql - 设置我的画廊表格

C# 正则表达式验证电话号码

c# - 在 C# 中检测焦点控制

c# - 在 C# 中直接在 DateTimePicker 上转到月份和年份

Java泛型返回对象而不是列表

sql-server - 添加具有生成名称的 DEFAULT 约束

android - 我如何处理SQLiteConstraintException错误代码19?