C# 如何正确阅读MSDNAPI。(例如IDbSetExtensions.AddOrUpdate)
例如,如果转到MSDN-->上的IDbSetExtensions.AddOrUpdate方法(IDbSet,Expression>,tenty[])页面,您会看到它需要三个参数。设置、表达和张力 但是人们通常写的是下面的内容 AddOrUpdate(item=>new{item.Text},itemArray);--对于迁移中的“种子方法” 我的问题是: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
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 typeTObject
将被推断为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)*那样提供吗?省略论点是可以的,这仍然有点神秘。我还缺少什么吗?第一个参数是调用方法的实例。