当前位置:  开发笔记 > 编程语言 > 正文

多个通用方法,具有相同的名称和参数,但结果和约束不同

如何解决《多个通用方法,具有相同的名称和参数,但结果和约束不同》经验,为你挑选了2个好方法。

我目前正在重写自定义RPC机制的一部分(不能被其他东西替换,所以不建议;-)).调用的参数收集在内部使用字典的自定义集合中.有一种方法T Get(string)可以检索命名参数.对于可选参数,我想添加一个TryGet(string)返回参数的方法,或者null如果它不存在,那么调用代码可以使用null合并运算符提供默认值.当然,对于值类型,这不起作用,但我可以使用T?,这是我想要的.

所以我拥有的是:

public class Arguments
{
    // lots of other code here

    public T TryGet(string argumentName) where T : class
    {
        // look up and return value or null if not found
    }

    public T? TryGet(string argumentName) where T : struct
    {
        // look up and return value or null if not found
    }
}

有了这个,我希望能够做到以下几点:

return new SomeObject(
                      args.TryGet("Name") ?? "NoName",
                      args.TryGet("Index") ?? 1
                      );

由于约束是互斥的,编译器应该能够生成正确的代码(始终可以从调用站点给出的泛型类型推断出调用).编译器抱怨该类型已经定义了一个名为"TryGet"的成员,该成员具有相同的参数类型.

有没有办法让这样的工作没有给这两种方法不同的名字?



1> Sky Sanders..:

约束不是签名的一部分.因此,你的问题的答案是否定的.



2> Paul Turner..:

.NET Framework中的类处理此方案的方式是TryGetValue使用out参数.返回值是get是否成功的指示符,其中out参数包含请求的值(成功时)或合适的默认值(失败时).

这种模式使得实现对于引用和值类型非常简单.您只需要一种方法来处理这两种情况.

有关此模式的示例,请参阅Dictionary.TryGetValue.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有