使用具有 return 值 C# 和可选参数 C# 的方法创建列表
Create a list with methods with a return value C# and optional argument C#
我有一个列表,其中包含我从如下循环中调用的方法(在上一个问题的帮助下:):
string method;
var methods = new List<(Func<string> analysismethod, string caption)>
{
(definitearticle, "Definite article"),
(indefinitearticle, "Indefinite article"),
};
for (int i = 0; i < methods.Count(); i++)
{
string gender = methods[i].analysismethod.Invoke();
if (gender != "Cannot determine")
{
method = methods[i].caption;
break;
}
}
我现在想做的是向 methods
中的每个方法添加一个可选参数 (a string
)(这样我也可以将它们重用于其他目的),例如:
definitearticle (word = default)
{
}
但是,当我尝试添加可选参数时,出现以下错误:
Error CS1950 The best overloaded Add method 'List<(Func<string> analysismethod, string caption)>.Add((Func<string> analysismethod, string caption))' for the collection initializer has some invalid arguments
Error CS1503 Argument 1: cannot convert from '(method group, string)' to '(Func<string> analysismethod, string caption)'
我该如何解决这个问题?
编辑:我有时想将它们与指定字符串一起使用的原因是有时我想针对特定输入分析它们,而有时我只想检查我存储的句子中的默认位置在 struct
:
public string indefinitearticle(string word = default)
{
if (word == default)
{
word = AnalysisData.wordBeforeNoun;
}
string gender = default;
if (word == "eine")
{
gender = "Fem";
}
else if (word == "ein")
{
gender = "Non fem";
}
return string.IsNullOrEmpty(gender) ? "Cannot determine" : gender;
}
引入重载方法
public string DefiniteArticle(string param1, string param2)
{
// calculate and return "some string";
}
public string DefiniteArticle()
{
return DefiniteArticle("default value1", "default value2");
}
现在,通过无参数重载,您可以将其添加到 Func<string>
的集合中以满足其类型,并将“原始”方法用于其他目的。
var delagates = new Func<string>[] { DefiniteArticle }
请注意,委托的类型与任何其他 int
或 string
一样 - 为了能够将方法添加到委托方法的集合中,方法应该是相同的类型。重载方法允许我们使用所需的委托类型“装饰”原始方法
我有一个列表,其中包含我从如下循环中调用的方法(在上一个问题的帮助下:
string method;
var methods = new List<(Func<string> analysismethod, string caption)>
{
(definitearticle, "Definite article"),
(indefinitearticle, "Indefinite article"),
};
for (int i = 0; i < methods.Count(); i++)
{
string gender = methods[i].analysismethod.Invoke();
if (gender != "Cannot determine")
{
method = methods[i].caption;
break;
}
}
我现在想做的是向 methods
中的每个方法添加一个可选参数 (a string
)(这样我也可以将它们重用于其他目的),例如:
definitearticle (word = default)
{
}
但是,当我尝试添加可选参数时,出现以下错误:
Error CS1950 The best overloaded Add method 'List<(Func<string> analysismethod, string caption)>.Add((Func<string> analysismethod, string caption))' for the collection initializer has some invalid arguments
Error CS1503 Argument 1: cannot convert from '(method group, string)' to '(Func<string> analysismethod, string caption)'
我该如何解决这个问题?
编辑:我有时想将它们与指定字符串一起使用的原因是有时我想针对特定输入分析它们,而有时我只想检查我存储的句子中的默认位置在 struct
:
public string indefinitearticle(string word = default)
{
if (word == default)
{
word = AnalysisData.wordBeforeNoun;
}
string gender = default;
if (word == "eine")
{
gender = "Fem";
}
else if (word == "ein")
{
gender = "Non fem";
}
return string.IsNullOrEmpty(gender) ? "Cannot determine" : gender;
}
引入重载方法
public string DefiniteArticle(string param1, string param2)
{
// calculate and return "some string";
}
public string DefiniteArticle()
{
return DefiniteArticle("default value1", "default value2");
}
现在,通过无参数重载,您可以将其添加到 Func<string>
的集合中以满足其类型,并将“原始”方法用于其他目的。
var delagates = new Func<string>[] { DefiniteArticle }
请注意,委托的类型与任何其他 int
或 string
一样 - 为了能够将方法添加到委托方法的集合中,方法应该是相同的类型。重载方法允许我们使用所需的委托类型“装饰”原始方法