Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 理解问题=>Lambda运算符C_C#_Linq_Lambda - Fatal编程技术网

C# 理解问题=>Lambda运算符C

C# 理解问题=>Lambda运算符C,c#,linq,lambda,C#,Linq,Lambda,我对Lambda操作符=>有一个大致的理解,但我不明白变量z,c,s的属性从何而来,就像z.Name一样。有一些对象类型推理魔法正在发生,我不明白 public class DbReadService : IDbReadService { private VODContext _db; public DbReadService(VODContext db) { _db = db; } private (IEnumerable<st

我对Lambda操作符=>有一个大致的理解,但我不明白变量z,c,s的属性从何而来,就像z.Name一样。有一些对象类型推理魔法正在发生,我不明白

public class DbReadService : IDbReadService
{
    private VODContext _db;
    public DbReadService(VODContext db)
    {
        _db = db;
    }


    private (IEnumerable<string> collections, IEnumerable<string> references) GetEntityNames<TEntity>() where TEntity : class
    {
        var dbsets = typeof(VODContext).GetProperties(BindingFlags.Public | BindingFlags.Instance)
            .Where(z => z.PropertyType.Name.Contains("DbSet"))
            .Select(z => z.Name);

        var properties = typeof(TEntity).GetProperties(BindingFlags.Public | BindingFlags.Instance);

        var collections = properties.Where(l => dbsets.Contains(l.Name)).Select(s => s.Name);

        var classes = properties.Where(c => dbsets.Contains(c.Name + "s")).Select(s => s.Name);

        return (collections: collections, references: classes);




    }
}

LINQ函数在通用IEnumerable上运行。当您在IEnumerable上调用任何LINQ函数时,例如List.wherec=>c.variable,c将是某个类型的实例。
在您的示例中,我假设属性是属性的列表或数组,因此,c将是属性的实例。

c只是从属性中枚举的所有项的占位符的任意名称,即c是这些属性中的每一个。在第2条中,选择完全相同的项目,即s。。名字的选择相当混乱。在我看来,总是选择x或p会更好。有关的文档将有所帮助。是的,Mat,类型推断确实是我的问题。我知道c参数可以是任何东西,但不知何故,c被推断为某种神秘的对象类型,以使.Name属性可用。我将用额外的代码重申这个问题。我知道c参数可以是任何东西不,它不可能是任何东西!!它可以命名为任何名称,但它将始终是属性列表中的一个元素。实际类型的推断方式与properties..TaW中的foreach var x中的推断方式相同。经过进一步检查,PropertyInfo的基本类型是MethodInfo,它确实具有Name属性。我想这个谜已经解开了。