在 Func 中使用泛型类型参数,并使用特定类型调用 Func?

我有以下方法在 aT中使用Func:


public void DoSomething<T>(string someString, Func<T, bool> someMethod) 

{    

    if(someCondition) 

    {

        string A;

        bool resultA = someMethod(A);

    }

    else 

    {

        string[] B;

        bool resultB = someMethod(B);

    }    

    // Some other stuff here ...

}

我正在DoSomething以下列方式调用该方法:


DoSomething<string>("abc", someMethod);

DoSomething<string[]>("abc", someMethod);

并且 someMethod 存在,具有以下定义:


bool someMethod(string simpleString);

bool someMethod(string[] stringArray);

现在编译失败,方法中出现以下错误DoSomething:


cannot convert from 'string' to 'T'

cannot convert from 'string[]' to 'T'

我无法弄清楚问题是否有解决方案,或者我尝试的方法不可行。它看起来类似于问题如何使用泛型类型参数传入 func?,虽然它对我的场景没有帮助。


素胚勾勒不出你
浏览 219回答 2
2回答

沧海一幻觉

你的例子看起来有点不一致,但如果你写的是一般的东西,它应该看起来更像这样:public void DoSomething<T>(string someString, Func<T, bool> someMethod)&nbsp;{&nbsp; &nbsp; T a;&nbsp; &nbsp; someMethod(a);}请注意,不是使用if在类型之间进行选择,然后将类型声明为 astring或string[],而是简单地将类型声明为T,它会在编译代码时被替换,以便它适用于函数。当您发现自己使用ifor在类型之间进行选择时switch case,您可能不需要通用解决方案;事实上,这个逻辑根本不是通用的。它是具体的。在这种情况下,只需编写两个原型:public void DoSomething(string someString, Func<string, bool> someMethod)&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; string A;&nbsp; &nbsp; bool resultA = someMethod(A);}public void DoSomething(string someString, Func<string[], bool> someMethod)&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; string[] A;&nbsp; &nbsp; bool resultA = someMethod(A);}这称为方法重载。编译器将通过从提供的函数推断类型来自动选择具有正确参数的正确方法。

繁花不似锦

您可以通过反射实现它:public void DoSomething<T>(string someString, Func<T, bool> someMethod){&nbsp; &nbsp; var args = new Dictionary<Type, object>&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; [typeof(string)] = "string", //string A;&nbsp; &nbsp; &nbsp; &nbsp; [typeof(string[])] = new[] { "string" }, //string[] B;&nbsp; &nbsp; };&nbsp; &nbsp; var arg = args[typeof(T)];&nbsp; &nbsp; var result = (bool)someMethod.Method.Invoke(someMethod.Target, new[] { arg });}用法:DoSomething<string>("abc", someMethod);DoSomething<string[]>("abc", someMethod);
打开App,查看更多内容
随时随地看视频慕课网APP