小编Fow*_*owl的帖子

使用JDBC连接到SQL Server LocalDB

是否可以使用JDBC连接到SQL Server LocalDB? 似乎(截至2011年12月)这是不可能的.

您知道变通方法还是状态变化?

sql-server jdbc localdb

21
推荐指数
2
解决办法
2万
查看次数

Typescript是否有运算符重载?

我的问题是如果在打字稿中有操作符重载,如果它存在,我可以给出一个示例或链接,您可以阅读它.

operator-overloading typescript

13
推荐指数
2
解决办法
7114
查看次数

为什么Enumerable.Range实现IDisposable?

只是想知道为什么Enumerable.Range实施IDisposable.

我理解为什么IEnumerator<T>,但IEnumerable<T>不要求它.


(我在玩我的.Memoise()实现时发现了这个,它的声明就像

if (enumerable is IDisposable)
    ((IDisposable)enumerable).Dispose();
Run Code Online (Sandbox Code Playgroud)

在它的"源完成"方法中,我因为好奇而放置了一个断点,并且是通过测试触发的.)

.net c# iterator idisposable resource-management

11
推荐指数
1
解决办法
283
查看次数

检查VBScript语法

有没有用于验证VBScript语法而没有实际运行脚本的任何好工具?

我得到的是,如果我做了类似的事情:

If (year == "2005" && type == 1) Then
...
End If
Run Code Online (Sandbox Code Playgroud)

是否有工具可以告诉我'&&'应该是'And'和'==',只是'='?

syntax vbscript wsh

7
推荐指数
2
解决办法
2万
查看次数

利用PLINQ和自定义Enumerable Extensions

许多自定义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)

c# linq plinq

7
推荐指数
1
解决办法
305
查看次数

使用Any()时优化OrderBy()

所以我有一个相当标准的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.

linq optimization linq-to-objects

6
推荐指数
2
解决办法
398
查看次数

Cold Tasks和TaskExtensions.Unwrap

我有一个使用冷(未启动)任务的缓存类,以避免多次运行昂贵的东西.

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()支持"冷任务"?

c# task-parallel-library async-await c#-5.0 .net-4.5

4
推荐指数
1
解决办法
1189
查看次数

检测附加的Profiler

我知道您可以通过使用确定调试器是否附加System.Diagnostics.Debugger.IsAttached,但有没有办法确定是否附加了分析器?

我的探查器无法通过线程池跟踪任务,因此我想在分析时自动禁用并行性.

.net c# windows profiling

3
推荐指数
1
解决办法
445
查看次数