问题标签 [base-class-library]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - 在外部应用程序中抛出错误的“正确”异常类型是什么?
我有一个辅助方法,可以使用外部(命令行)实用程序。进程完成后,它会检查退出代码,如果检测到错误,则会抛出包含 StandardError 内容的异常。
我意识到这对我给定的场景并不重要。但是对于外部应用程序中的错误,“正确”的异常类型是什么。
我记得很久以前在 msdn 的某个地方看到了所有内置异常类型及其推荐用途的列表,但现在找不到了。
c# - 在私有字段中使用 Bcl ImmutableDictionary
假设我有一个将从多个线程调用的类,并且将在该类的私有字段中的ImmutableDictionary中存储一些数据
是否可以通过多个线程以这样的方式调用它,以至于您会收到关于字典中已经存在的键的错误?
Thread1 检查字典是否为假 Thread2 检查字典是否为假 Thread1 添加值并更新对 _dict 的引用 Thread2 添加值,但它已添加,因为它使用相同的引用?
c# - BCL 不可变集合:相等是非对称的
由于不可变数据结构是一等值,我们可以像与任何其他值一样比较它们的相等性或顺序。但是在 BCL 不可变集合预览中事情变得复杂了,因为每个不可变集合都可以通过IEqualityComparer<T>
/IComparer<T>
实例进行参数化。看起来应该不允许比较具有不同比较器的不可变集合(因为没有为比较器本身定义相等),因为它使相等关系不对称:
这种行为会以某种方式得到解决吗?
c# - IServiceLocator.GetInstance(Type) 的意图与 IServiceProvider.GetService(Type) 的意图有何不同?
IServiceProvider.GetService(Type serviceType)
方法签名和的意图有区别IServiceLocator.GetInstance(Type serviceType)
吗?如果有,有什么区别?
我一直将它们视为等效的,但为了保持一致性,我选择使用单一方法。这似乎是处理这两个接口的一个足够好的解决方案,但我真的很想知道它们的实际用途是什么,以便我可以确定我在正确的地方使用了正确的接口。 如果他们的意图实际上是相同的,那么有任何理由为同一目的使用多组语义吗?(我知道签名是在 开始时推荐的,GetInstance
Microsoft.Practices.ServiceLocation
但这似乎并不是引入重复的合理理由)。
为什么我很困惑
下面列出了我在试图找到这个问题的答案时发现的有时相互矛盾的事实,以及我对它的解释。我将这些包括在内,以便可以在有关该主题的所有已知信息的背景下解决我的问题。
MSDN 文档
IServiceProvider
说该方法GetService(Type serviceType)
应该返回serviceType 类型的服务对象。
-或 -如果没有serviceType类型的服务对象,则为
null。MSDN 文档
IServiceLocator
缺少方法文档,但 VS 对象浏览器中的摘要说GetInstance(Type serviceType)
该方法返回“请求的服务实例”。但是,文档中还有一个异常条目IServiceLocator
,指出ActivationException
如果解析服务实例时出现错误,则应抛出一个异常条目。ActivationException
位于Microsoft.Practices.ServiceLocation
引入多年后IServiceProvider
引入的命名空间中。因此,可以理解的IServiceProvider
是 不指异常。话虽如此,IServiceLocator
接口的文档没有说明null
如果没有找到结果就返回。也不清楚是否缺少所请求的服务类型的实现应构成例外。缺少服务类型的实现是否会导致
ActivationException
inIServiceLocator
实现? 看起来不像。的实现模板IServiceLocator
忽略任何非空后置条件的概念。的实现模板
IServiceLocator
也被IServiceProvider.GetService(Type)
视为IServiceLocator.GetInstance()
. 这是否算作违反 Liskov(由于在未在基类型上声明的子类型中抛出异常),或者,这实际上需要实现差异而不是接口方法签名上声明的异常?我的意思是:我们确定ServiceLocatorImplBase
实现模板IServiceLocator
正确实现了这两个接口吗?IServiceProvider
将调用包装GetInstance
在 try 块中并null
在捕获到异常时返回 是否会更好地表示接口的意图?附录:与此相关的另一个问题是 to 的对应
IServiceLocator.GetAllInstances(Type)
关系IServiceLocator.GetInstance(Type)
。具体来说,对于任何类型 T,其实现是否应该IServiceLocator.GetAllInstances(typeof(T))
返回与 ? 相同的结果IServiceLocator.GetInstance(typeof(IEnumerable<>).MakeGenericType(typeof(T))
? (很容易看出这与IServiceProvider
对应关系有什么关系,但我认为最好保持问题简单,只比较这种情况下同一接口的两种方法。)
.net - 为什么要列出实现 IReadOnlyList在.NET 4.5 中?
为什么在 .NET 4.5中List<T>
实现?IReadOnlyList<T>
List<T>
不是只读...
.net - Microsoft.Bcl.Async doesn't work
I try to use Async with Portable Class Library. I use Profile 104, which includes:
- .NET 4.5
- Silverlight 4
- WP 7.5
- WinRT
Installation works and I can use System.Threading.Tasks
but I can't compile because I have this error:
Cannot await
System.Threading.Task<System.Net.HttpWebResponse>
On the line with await
in this sample:
Why?
Update
My profile 104 is update with monodroid and monotouch I use NuGet to install Microsoft.Bcl.Async v 1.0.16 If I add AsyncBridge.Portable v 0.2.0 I have no warning of Visual Studio, but it doesn't compile. There are conflicts between this 2 libraries in System.Attributes
How make working this libraries together ?
Thanks
c# - Async WebClient 这么慢?
我正在玩最简单的使用情况bcl.async in wp7
。
所以,我在第一行和最后一行都有断点,在设备上以调试模式运行。有时需要大约 5 秒才能得到答案(这很奇怪),但有时几乎需要一分钟。在来自设备的 1 个请求期间,我能够在浏览器中检查请求(获得即时答复,不到一秒),喝了些茶,然后检查 9gag。
我可以假设我的网络不好,但是浏览器的请求是光速的,所以这不是问题。另外,我尝试了 RestSharp,但遇到了同样的问题。非异步 WebClient 调用工作正常。
编辑: 快速解决方案:您要做的第一件事就是重新启动设备。
c# - 将项目转换为 .Net 4.5(使用 TPL)
目前拥有几个使用 .net 3.5 和 .net 4.0 的项目。
决定全部迁移到 .NET 4.5。
所有项目都已经在 VS2012 (C# 5.0) 中并且所有项目都使用 async-await 关键字
.net 4.0 项目正在使用 Microsoft.Bcl.Async
.net 3.5 项目正在使用 AsyncBridge.Net35 和 TaskParallelLibrary
问题是:
- .net 4.5 中没有 TaskEx 类和其他扩展方法,或者我不知道这些的存在
我怎样才能做出这种改变,而无需对代码进行重大更改?
c# - 我可以使用大括号初始化 BCL 不可变集合吗?
在过去,我们可以使用大括号方便地初始化可变集合,如下例所示:
是否有类似的语法可用于 BCL 不可变集合?我知道它仍然是一个预发布版本,但也许有推荐的语法,或者至少这个问题将作为实现这些方便初始化程序的反馈。
同时,我发现的最短的是:
c# - 为什么在添加 Microsoft.Bcl.Async 包后在 app.config 文件中添加了“bindingRedirect”?
我想知道为什么 nuget 在安装后将以下代码添加到我的应用程序app.config
文件中Microsoft.Bcl.Async
:
如果我从配置中删除此 XML 元素,应用程序将无法正常运行。
据我了解,我们可以使用bindingRedirect
使应用程序加载更新或旧版本的程序集,以防我们在编译 EXE 时使用的版本消失了。
但是我使用的正是版本2.5.19.0
,那我为什么需要重定向呢?
为什么我需要这个bindingRedirect
?