【发布时间】:2022-01-16 17:30:34
【问题描述】:
我做了一个小程序,想分析语料库中德语名词的性别。为此,我创建了一些以字符串作为返回值的方法。例如,我想检查语料库中名词前面是否有定语,看它是否包含“der”、“die”或“das”。深化它返回不同的值。如下:
private string definitearticle()
{
// code, where gender is the string which we return - if we can't determine
// the gender it returns "Cannot determine"
return gender;
}
private string indefinitearticle()
{
// code, where gender is the string which we return - if we can't determine
// the gender it returns "Cannot determine"
return gender;
}
我想逐个循环每个方法,直到我不再得到“无法确定”作为返回值,如下所示,并带有指向方法的指针列表(如在Storing a list of methods in C# 中):
var methods = new List<(System.Action check, string caption)>()
{
(definitearticle, "Definite article"),
(indefinitearticle, "Indefinite article"),
};
foreach (var method in methods)
{
gender = method.check.Invoke();
if (gender != "Cannot determine")
{
// store the outcome that was returned to a list
break;
}
}
问题是我不知道如何将List 与methods 一起使用,后者具有return value(在本例中为string)。有谁能帮帮我吗?
【问题讨论】:
-
我注意到您有一个姓名列表,并且您想在其中搜索一个或多个字母?对吗?
-
使用 Func
代替 Action 。微软文档:docs.microsoft.com/en-us/dotnet/api/system.func-2?view=net-6.0 -
我想我会定义一个枚举来表示性别/不能,然后有一个
new List<Func<string, GenderEnum>>()- 我无法弄清楚元组的caption成员是做什么的,但感觉如果它在其他地方使用,可以免费恢复它。 funcFunc<string, Gender>接受一个字符串参数,我想这就是你要传入检查的内容.. -
(但是,如果您例如循环遍历表示为字符串 [] 的单词列表的语料库,并传递一个 int 索引进行检查,以便您可以查看 N-1'第一个词来查看它是否是 der/die 等,那么您需要制作接受
string[], int并返回GenderEnum的方法,所以它会是Func<string[], int, GenderEnum>- 无论如何,这就是模式:Func<T1,T2,..TN, TReturn>,至少只是 TReturn -
谢谢!我正在逐行分析维基百科数据,所以它是针对那些名称的。 Caption 只是在我写结果时为统计建议找到正确性别的函数的标题。