我不太喜欢 C#(我来自Java),并且对与该示例相关的 delegate 方法的工作方式有以下疑问:
List<string> urlList = IndirizziProtocolliSQL.GetListaIndirizziSiti(dbConfig);
foreach (string currentUrl in urlList)
{
Debug.Print("Current url: " + currentUrl);
SPSecurity.RunWithElevatedPrivileges(delegate ()
{
using (SPSite oSiteCollection = new SPSite(currentUrl))
{
using (SPWeb oWebsite = oSiteCollection.OpenWeb())
{
}
}
});
}
据我了解,阅读官方文档: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/delegates/
delegate()用于将一个方法作为另一个方法的输入参数。
例如,如果我有类似的内容:
public delegate int MyDelegate (string s);
它表示对具有该方法签名的任何方法的引用(返回类型,方法名称,放入参数)。
如果正确,那第一个原始示例到底是什么意思?为什么相反,方法签名有一个 using(...){...} 块?
此语法的确切含义是什么?
答案 0 :(得分:5)
delegate () { }
仅表示一个匿名内联方法/委托已传递给该函数。该方法的主体就像任何C#代码块一样,可以包含using
语句或任何其他语句。
这类似于:
private void Method()
{
using (SPSite oSiteCollection = new SPSite(currentUrl))
{
using (SPWeb oWebsite = oSiteCollection.OpenWeb())
{
}
}
});
SPSecurity.RunWithElevatedPrivileges(Method);