C#泛型可以这么酷吗?
发布时间:2020-12-16 00:10:26 所属栏目:百科 来源:网络整理
导读:我希望能够做到这样的事情: class AT1,T2{ public void Call(T1 arg1,T2 arg2) { B b = new B(); b.DoSomething(arg1); // determine which overload to use based on T1 b.DoSomething(arg2); // and T2 }} class B{ public void DoSomething(int x) { //
我希望能够做到这样的事情:
class A<T1,T2> { public void Call(T1 arg1,T2 arg2) { B b = new B(); b.DoSomething(arg1); // determine which overload to use based on T1 b.DoSomething(arg2); // and T2 } } class B { public void DoSomething(int x) { // ... } public void DoSomething(float x) { // ... } } 我知道可以通过if / else检查来完成,但这似乎并不优雅,特别是当我有20种类型可供选择时. 解决方法
如果你想要类型安全,你可以做的最好的事情可能是:
class A<T1,T2> { public void Call<T>(T1 arg1,T2 arg2) where T : IDoSomething<T1>,IDoSomething<T2>,new() { T b = new T(); b.DoSomething(arg1); b.DoSomething(arg2); } } public interface IDoSomething<T> { void DoSomething(T arg); } public class B : IDoSomething<int>,IDoSomething<float> { void IDoSomething<int>.DoSomething(int arg) { Console.WriteLine("Got int {0}",arg); } void IDoSomething<float>.DoSomething(float arg) { Console.WriteLine("Got float {0}",arg); } } 您可以使用如下: var a = new A<int,float>(); a.Call<B>(1,4.0f); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |