我有以下查询:
drivers.Select(d => { d.id = 0; d.updated = DateTime.Now; return d; }).ToList();
Run Code Online (Sandbox Code Playgroud)
drivers是一个List,它带有不同的id和更新的值,因此我在更改Select中的值,但这是正确的方法.我已经知道我没有给司机重新分配司机,因为Resharper抱怨它,所以我想如果是这样会更好:
drivers = drivers.Select(d => { d.id = 0; d.updated = DateTime.Now; return d; }).ToList();
Run Code Online (Sandbox Code Playgroud)
但这仍然是某人应该为驱动程序列表中的每个元素分配新值的方式吗?
我已经深入阅读了一些关于代理的内容,一个方法的委托可能与多播委托不同,这让人感到困惑.但是,通过反射,你可以清楚地看到,即使只有一个方法,委托确实是从一个对象派生出来的MulticastDelegate,而不是立即派生出来的Delegate.
class Program
{
public delegate void MyDelegate();
static void SomeMethod()
{
}
static void Main(string[] args)
{
MyDelegate del = null;
del = new MyDelegate(SomeMethod);
Console.WriteLine(del.GetType().BaseType.Name);
Console.ReadKey();
}
}
Run Code Online (Sandbox Code Playgroud)
输出:MulticastDelegate
我意识到a MulticastDelegate包含一个Delegate对象的调用列表.我想知道是否有可能Delegate直接创建单个,如果这样做有任何好处,除了单独调用GetInvocationList()和提取Delegate对象.