Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.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# 如何正确阅读MSDNAPI。(例如IDbSetExtensions.AddOrUpdate)_C#_.net - Fatal编程技术网

C# 如何正确阅读MSDNAPI。(例如IDbSetExtensions.AddOrUpdate)

C# 如何正确阅读MSDNAPI。(例如IDbSetExtensions.AddOrUpdate),c#,.net,C#,.net,例如,如果转到MSDN-->上的IDbSetExtensions.AddOrUpdate方法(IDbSet,Expression>,tenty[])页面,您会看到它需要三个参数。设置、表达和张力 但是人们通常写的是下面的内容 AddOrUpdate(item=>new{item.Text},itemArray);--对于迁移中的“种子方法” 我的问题是: 为什么只提供了2个参数,而不是3个,而且还可以 “AddOrUpdate(item=>item.Text,itemArray)”和“AddOr

例如,如果转到MSDN-->上的IDbSetExtensions.AddOrUpdate方法(IDbSet,Expression>,tenty[])页面,您会看到它需要三个参数。设置、表达和张力

但是人们通常写的是下面的内容

AddOrUpdate(item=>new{item.Text},itemArray);--对于迁移中的“种子方法”

我的问题是:

  • 为什么只提供了2个参数,而不是3个,而且还可以

  • “AddOrUpdate(item=>item.Text,itemArray)”和“AddOrUpdate(item=>new{item.Text},itemArray)”之间有什么区别,其中第一个没有新操作符

  • 在编程时,我是否需要知道(项目模板中的)每一行都在做什么

  • 我是使用模板开始这个项目的,所以我不完全了解它在做什么,但分解整个模板确实需要时间

    为什么只提供了2个参数,而不是3个,而且还可以

    方法调用
    AddOrUpdate(item=>new{item.Text},itemArray)
    只传递两个参数,这两个参数的数量与
    AddOrUpdate(item=>item.Text,itemArray)
    相同

    有什么区别

    使用
    new{item.Text}
    的方法调用返回一个匿名类型,该类型具有一个名为
    Text
    的字符串属性(假定item.Text是字符串),该属性的值为item.Text。另一个方法返回一个字符串

    你需要知道每一行都在做什么吗

    不,只是编译器需要知道。但是,如果您知道代码的作用,它将帮助您编写软件

  • 您正在查看的方法是一个扩展方法。这就是为什么您可以在缺少第一个参数的情况下调用它

    如果仔细观察,可以看到该方法是静态的,这意味着应该使用类名来调用它,类名是
    IDbSetExtensions.AddOrUpdate
    。但是,因为它是一个扩展方法(
    第一个方法参数前面的这个
    修饰符实现了这一点),所以可以像调用第一个方法参数类型的实例方法一样调用它,在本例中为
    IDbSet

    了解有关MSDN上扩展方法的更多信息:

  • 对于
    AddOrUpdate(item=>item.Text,itemArray)
    generic type
    TObject
    将被推断为
    item.Text的任何类型(可能是
    string
    )。对于
    AddOrUpdate(item=>new{item.Text},itemArray)
    is将被推断为匿名类型,带有一个属性

  • 你绝对应该


  • 没有看到,@MarcinJuraszek在这方面有正确的答案,
    这个方法参数中的
    将该方法标记为扩展方法。编译器会自动传入
    集合
    ,因此您无需将
    myDbSet.AddOrUpdate(xxx,yyy)
    重写为
    IDbSetExtensions.AddOrUpdate(myDbSet,xxx,yyy)
    谢谢!谢谢你!那么,第一个参数(这个IDbSet)不应该像*AddOrUpdate(这个IDbSet=DbSet,item=>item.Text,itemArray)*那样提供吗?省略论点是可以的,这仍然有点神秘。我还缺少什么吗?第一个参数是调用方法的实例。