想象一下这样的函数:
private static ConcurrentList<object> list = new ConcurrentList<object>();
public void Add(object x)
{
Task.Factory.StartNew(() =>
{
list.Add(x);
}
}
Run Code Online (Sandbox Code Playgroud)
我不在乎什么时候确实将fentry添加到列表中,但我需要将它添加到最后(显然;))
我没有看到一种方法来正确地单元测试这样的东西而不返回任何回调处理程序或某事.因此,添加程序不需要的逻辑
你会怎么做?
有没有办法用LINQ对集合进行批量更新?目前,如果我有一个List<myObject>并且我想将列1更新为等于列中每一行的TEST,我将设置一个foreach循环,然后对于每个单独的对象,我将设置该值,然后保存它.这工作正常,但我只是想知道是否有一些LINQ方法在那里我可以做类似的事情myOject.BulkUpdate(columnName, value)?
从.NET 4和Windows 8或更高版本的平台开始,获取运行程序的操作系统版本是非常不确定的.
例如,在Windows 10中运行,如果我的项目有Windows 8 DLL,那么Environment.OSVersion.Version返回的6.2.9200.0是Windows 8而不是Windows 10.
在这个问题中解释了这种行为(crono的回答):c#中的Windows版本
所以我的问题如下:我们如何能够确定(并以.NET方式保留,以便能够在非Windows平台上使用它)运行我们的应用程序的操作系统版本?
链接到MSDN:
https://msdn.microsoft.com/en-us/library/system.environment.osversion(v=vs.110).aspx
我实现了这个扩展方法来同步另一个可以是不同类型的集合:
public static void Synchronize<TFirst, TSecond>(
this ICollection<TFirst> first,
IEnumerable<TSecond> second,
Func<TFirst, TSecond, bool> match,
Func<TSecond, TFirst> create)
{
var secondCollection = second.ToArray();
var toAdd = secondCollection.Where(item => !first.Any(x => match(x, item))).Select(create);
foreach (var item in toAdd)
{
first.Add(item);
}
var toRemove = first.Where(item => !secondCollection.Any(x => match(item, x))).ToArray();
foreach (var item in toRemove)
{
first.Remove(item);
}
}
Run Code Online (Sandbox Code Playgroud)
ReSharper给了我两个"隐式捕获的闭包",一个在第一个Where,一个在第二个,有没有办法解决它?我找不到一个.
[更新]
基于对Eric的观察,我编写了一个比使用equals函数更快的版本,而是使用哈希:
public static void Synchronize<TFirst, TSecond>(
this ICollection<TFirst> first,
IEnumerable<TSecond> second,
Func<TSecond, TFirst> convert,
Func<TFirst, int> firstHash = null,
Func<TSecond, …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来创建在主线程中同步运行的 TaskScheduler,以允许将 WPF 应用程序配置为单线程以进行调试。
任何想法?
现在,我正在使用 MSDN 上的示例LimitedTaskScheduler,它允许指定并发级别(使用多少个线程),并使用此扩展在应用程序启动之前设置静态 TaskFactory:
void SetOnTaskFactory(TaskFactory taskFactory)
{
const BindingFlag = BindingFlags.Static | BindingFlags.NonPublic
var field = typeof(Task).GetField("s_factory", BindingFlag);
field.SetValue(null, taskFactory);
}
Run Code Online (Sandbox Code Playgroud) c# ×4
asynchronous ×2
.net ×1
async-await ×1
closures ×1
collections ×1
linq-to-sql ×1
resharper ×1
taskfactory ×1
unit-testing ×1
wpf ×1