c# - 带返回值的匿名方法

标签 c# lambda

请告诉我哪里出了问题以及如何为此实现编写带返回值的匿名方法

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(...) 的签名知道函数的参数类型必须是什么。方法,因此它隐式地将类型分配给 ij .

关于c# - 带返回值的匿名方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27681545/

相关文章:

c# - 替换二维数组中的字符串值

c# - 如何检查具有相同值的列表是否存在

c# - 捕获键盘快捷键并转发

python - 使用来自其他 Series/DataFrame 的值(曲线下面积)过滤 DataFrame 中的每个 X

c# - 我如何迭代 Asp.net MVC3 中的项目

c# - Roslyn:检索父级或祖先 SyntaxNode 中的符号

用于 JDBC 语句执行的 Java 8 lambda 样式包装器

nhibernate - 使用 NHibernate 处理多个表的 JoinQueryOver

lambda - 用 rust 编写的替代功能样式

c# - lambda 表达式内的赋值