请告诉我哪里出了问题以及如何为此实现编写带返回值的匿名方法
public class Test
{
public string Implisity { get; set; }
}
class Program
{
static void Main(string[] args)
{
/*Here is a problem */
var variable = Method(delegate(IList<string> i, List<string> j){ return new Test(){Implisity = i[j.IndexOf("Implisity")]}; });
}
public static List<T> Method<T>(Func<IList<string>, IList<string>, T> staff) { return new List<T>(){staff(new List<string>() {"1","2"}, new List<string>(){"Explisity","Implisity"})}; }
}
这是我需要匿名的扁平方法
public static Test Annonymous(IList<string> i, List<string> j)
{
var obj = new Test() { Implisity = i[j.IndexOf("Implisity")] };
return obj;
}
最佳答案
问题是 Method(...)
方法需要一个 Func<...>
具有不同的参数类型:它需要一个采用两个 IList<string>
的方法对象,而您正在制作一个接受 IList<string>
的委托(delegate)和一个 List<string>
var variable = Method(
delegate(IList<string> i, IList<string> j) {
// ^
return new Test() {
Implisity = i[j.IndexOf("Implisity")]
};
}
);
为避免将来出现此类问题,请使用隐式类型,如下所示:
var variable = Method( (i, j) => new Test { Implisity = i[j.IndexOf("Implisity")] } );
在这个例子中,编译器通过 Method(...)
的签名知道函数的参数类型必须是什么。方法,因此它隐式地将类型分配给 i
和 j
.
关于c# - 带返回值的匿名方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27681545/