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

一种接受不同参数的方法

如何解决《一种接受不同参数的方法》经验,为你挑选了3个好方法。

使用FW 4.5.1我有一个方法:

void DoSomething(string s)

我想允许函数也接受int,但是在相同的参数下.这意味着我想写:

void DoSomething(var s)

有时sint,有时string.

我怎样才能做到这一点?



1> Jon Skeet..:

您可以考虑三个选项,具体取决于您实际尝试实现的目标:

使用重载

public void DoSomething(int s) { ... }
public void DoSomething(string s) { ... }

只会接受intstring- 这可能是好事还是坏事,取决于你想要实现的目标.如果你真的只希望能够接受intstring,这是国际海事组织的最佳解决方案.

使用 object

public void DoSomething(object s) { ... }

这将允许您传递任何内容.

使用泛型

public void DoSomething(T value) { ... }

这仍然允许您传入任何内容,但是如果(比方说)您希望稍后接受两个必须是相同类型的值(或至少是兼容类型),则会提供更多的类型安全性


我认为最好编辑答案,让顶部的重载看到,因为这是你认为最好的

2> juunas..:

你可以通过重载实现你想要的.

void DoSomething(string s){ DoSomething(int.Parse(s)); }
void DoSomething(int s){ /* Your code here */ }

或者反过来说:

void DoSomething(string s){ /* Your code here */ }
void DoSomething(int s){ DoSomething(s.ToString()); }



3> Carbine..:

您可以使用泛型

void MyMethod(T param)
{
    if (typeof(T) == typeof(int))
    {
        // the object is an int
    }
    else if (typeof(T) == typeof(string))
    {
        // the object is a string
    }
}


对我来说,这并不是绝对的“泛型”,因为它只能真正处理两种类型-如果仅要支持两种类型,则我将使用重载。
同意@JonSkeet我确定OP仅需要一种方法,但是如果没有OP想要修改的实际方法,则无法提出更好的实现。
推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有