使用FW 4.5.1我有一个方法:
void DoSomething(string s)
Run Code Online (Sandbox Code Playgroud)
我想允许函数也接受int,但是在相同的参数下.这意味着我想写:
void DoSomething(var s)
Run Code Online (Sandbox Code Playgroud)
有时s会int,有时string.
我怎样才能做到这一点?
Jon*_*eet 17
您可以考虑三个选项,具体取决于您实际尝试实现的目标:
public void DoSomething(int s) { ... }
public void DoSomething(string s) { ... }
Run Code Online (Sandbox Code Playgroud)
这只会接受int和string- 这可能是好事还是坏事,取决于你想要实现的目标.如果你真的只希望能够接受int和string,这是国际海事组织的最佳解决方案.
objectpublic void DoSomething(object s) { ... }
Run Code Online (Sandbox Code Playgroud)
这将允许您传递任何内容.
public void DoSomething<T>(T value) { ... }
Run Code Online (Sandbox Code Playgroud)
这仍然允许您传入任何内容,但是如果(比方说)您希望稍后接受两个必须是相同类型的值(或至少是兼容类型),则会提供更多的类型安全性
juu*_*nas 11
你可以通过重载实现你想要的.
void DoSomething(string s){ DoSomething(int.Parse(s)); }
void DoSomething(int s){ /* Your code here */ }
Run Code Online (Sandbox Code Playgroud)
或者反过来说:
void DoSomething(string s){ /* Your code here */ }
void DoSomething(int s){ DoSomething(s.ToString()); }
Run Code Online (Sandbox Code Playgroud)
您可以使用泛型
void MyMethod<T>(T param)
{
if (typeof(T) == typeof(int))
{
// the object is an int
}
else if (typeof(T) == typeof(string))
{
// the object is a string
}
}
Run Code Online (Sandbox Code Playgroud)