gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:23:17 33 4
gpt4 key购买 nike

我有以下方法,其中 TFunc 中使用:

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'

我无法弄清楚问题是否有解决方案,或者我正在尝试的方法不可行。它看起来类似于问题 How can I pass in a func with a generic type parameter? ,尽管它对我的场景没有帮助。

最佳答案

你的例子看起来有点不一致,但如果你写的是一般的东西,它应该看起来更像这样:

public void DoSomething<T>(string someString, Func<T, bool> someMethod) 
{
T a;
someMethod(a);
}

请注意,我们不是使用 if 在类型之间进行选择,然后将类型声明为 stringstring[],而是只需将类型声明为 T,它会在编译代码时被替换,以适合函数。

当您发现自己使用 ifswitch case 在类型之间进行选择时,您可能不想要一个通用的解决方案;实际上,逻辑根本不是通用的。它是具体的。在那种情况下,只需编写两个原型(prototype):

public void DoSomething(string someString, Func<string, bool> someMethod) 
{
string A;
bool resultA = someMethod(A);
}


public void DoSomething(string someString, Func<string[], bool> someMethod)
{
string[] A;
bool resultA = someMethod(A);
}

这被称为 method overloading .编译器将通过从提供的函数中推断类型,自动选择具有正确参数的正确方法。

关于c# - 在 Func 中使用泛型类型参数,并以特定类型调用 Func?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51365189/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com