是否可以使用JDBC连接到SQL Server LocalDB? 似乎(截至2011年12月)这是不可能的.
您知道变通方法还是状态变化?
我的问题是如果在打字稿中有操作符重载,如果它存在,我可以给出一个示例或链接,您可以阅读它.
只是想知道为什么Enumerable.Range
实施IDisposable
.
我理解为什么IEnumerator<T>
,但IEnumerable<T>
不要求它.
(我在玩我的.Memoise()实现时发现了这个,它的声明就像
if (enumerable is IDisposable)
((IDisposable)enumerable).Dispose();
Run Code Online (Sandbox Code Playgroud)
在它的"源完成"方法中,我因为好奇而放置了一个断点,并且是通过测试触发的.)
有没有用于验证VBScript语法而没有实际运行脚本的任何好工具?
我得到的是,如果我做了类似的事情:
If (year == "2005" && type == 1) Then
...
End If
Run Code Online (Sandbox Code Playgroud)
是否有工具可以告诉我'&&'应该是'And'和'==',只是'='?
许多自定义Enumerable扩展可以根据其他内置操作实现 - 例如这个简单的方便方法:
public static bool AnyOf<TElement>(this TElement item, IEnumerable<TElement> items)
{
return items.Any(a => EqualityComparer<TElement>.Default.Equals(a, item));
}
Run Code Online (Sandbox Code Playgroud)
现在这将强制任何PLINQ查询回到顺序操作,即使PLINQ也有一个Any - 并且只相当于一个签名更改:
public static bool AnyOf<T>(this T item, ParallelQuery<T> items)
{
return items.Any(a => EqualityComparer<T>.Default.Equals(a, item));
}
Run Code Online (Sandbox Code Playgroud)
但是像这样复制它对我来说似乎很麻烦.
起初我认为类似下面的东西可能会起作用,但当然它不会^因为扩展方法是静态方法,因此决定调用Enumerable.Any
而不是ParallelQuery.Any
基于签名在编译时进行.
public static bool AnyOf<TElement, TEnumerable>(this TElement item, TEnumerable items)
where TEnumerable : class, IEnumerable<TElement>
{
return items.Any(a => EqualityComparer<TElement>.Default.Equals(a, item));
}
Run Code Online (Sandbox Code Playgroud)
我得出的结论是,如果没有使用不同的签名创建每个方法的副本,那是不可能的,但也许我错过了一些东西.(啧啧总是带着不可能的问题!)
或许可以从并行化(显然可以链接等)中受益的帮助器的更好示例是这样的.
public static IEnumerable<string> ToStrings(this IEnumerable<object> ienum)
{
return ienum.Select(a=> a.ToString());
}
Run Code Online (Sandbox Code Playgroud)
^编译器错误:
The type 'ParallelQuery<TElement>' …
Run Code Online (Sandbox Code Playgroud) 所以我有一个相当标准的LINQ-to-Object设置.
var query = expensiveSrc.Where(x=> x.HasFoo)
.OrderBy(y => y.Bar.Count())
.Select(z => z.FrobberName);
// ...
if (!condition && !query.Any())
return; // seems to enumerate and sort entire enumerable
// ...
foreach (var item in query)
// ...
Run Code Online (Sandbox Code Playgroud)
这列举了两次.这很糟糕.
var queryFiltered = expensiveSrc.Where(x=> x.HasFoo);
var query = queryFiltered.OrderBy(y => y.Bar.Count())
.Select(z => z.FrobberName);
if (!condition && !queryFiltered.Any())
return;
// ...
foreach (var item in query)
// ...
Run Code Online (Sandbox Code Playgroud)
工作,但有更好的方法吗?
是否有任何非疯狂的方式来"启发"Any()绕过非必需的操作?我想我记得这种优化进入了EduLinq.
我有一个使用冷(未启动)任务的缓存类,以避免多次运行昂贵的东西.
public class AsyncConcurrentDictionary<TKey, TValue> : System.Collections.Concurrent.ConcurrentDictionary<TKey, Task<TValue>>
{
internal Task<TValue> GetOrAddAsync(TKey key, Task<TValue> newTask)
{
var cachedTask = base.GetOrAdd(key, newTask);
if (cachedTask == newTask && cachedTask.Status == TaskStatus.Created) // We won! our task is now the cached task, so run it
cachedTask.Start();
return cachedTask;
}
}
Run Code Online (Sandbox Code Playgroud)
这很有效,直到您的任务实际使用C#5 await
,ala实现
cache.GetOrAddAsync("key", new Task(async () => {
var r = await AsyncOperation();
return r.FastSynchronousTransform();
}));)`
Run Code Online (Sandbox Code Playgroud)
现在它看起来像TaskExtensions.Unwrap()
我需要Task<Task<T>>
变成一个Task<T>
,但似乎它返回的包装实际上不支持Start()
- 它抛出一个异常.
TaskCompletionSource
(我去寻找稍微特殊的任务需求)似乎没有任何设施用于此类事情.
是否有替代方案TaskExtensions.Unwrap()
支持"冷任务"?
我知道您可以通过使用确定调试器是否附加System.Diagnostics.Debugger.IsAttached
,但有没有办法确定是否附加了分析器?
我的探查器无法通过线程池跟踪任务,因此我想在分析时自动禁用并行性.
c# ×4
.net ×2
linq ×2
.net-4.5 ×1
async-await ×1
c#-5.0 ×1
idisposable ×1
iterator ×1
jdbc ×1
localdb ×1
optimization ×1
plinq ×1
profiling ×1
sql-server ×1
syntax ×1
typescript ×1
vbscript ×1
windows ×1
wsh ×1