問題タブ [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 - What is the "correct" exception type to throw for an error in an external application?
I have a helper method that shells out to an external (command line) utility. Upon process completion it checks the exit code and if it detects an error throws an exception with the contents of StandardError.
I realize that it doesn't terribly matter for my given scenario. But what is the "correct" exception type for an error in an external application.
I remember a long time ago seeing a list somewhere on msdn of all the built-in exception types and their recommended uses but can no longer find it.
c# - プライベート フィールドでの Bcl ImmutableDictionary の使用
複数のスレッドから呼び出されるクラスがあり、このクラスのプライベート フィールドのImmutableDictionaryにデータを格納するとします。
これを複数のスレッドで呼び出して、辞書に既に存在するキーに関するエラーが発生する可能性はありますか?
スレッド 1 は、辞書が false であることを確認します。 スレッド 2 は、辞書が false であることを確認します。 スレッド 1 が値を追加し、_dict への参照が更新されます。
c# - BCL 不変コレクション: 等価性は非対称です
不変のデータ構造は第一級の値であるため、他の値と同様に、それらを等値または順序で比較できます。IEqualityComparer<T>
しかし、すべての不変コレクションは/IComparer<T>
インスタンスによってパラメーター化できるため、BCL 不変コレクション プレビューでは事態が複雑になりました。等式関係が非対称になるため、異なる比較子を持つ不変コレクションを比較することは許可されないようです (比較子自体には等式が定義されていないため)。
この動作は何らかの方法で修正されますか?
c# - IServiceLocator.GetInstance(Type) の意図は、IServiceProvider.GetService(Type) の意図とどのように異なりますか?
IServiceProvider.GetService(Type serviceType)
メソッド署名との意図に違いはありIServiceLocator.GetInstance(Type serviceType)
ますか? もしそうなら、違いは何ですか?
私は常にそれらを同等のものとして扱ってきましたが、一貫性を保つために単一の方法を使用することにしました。これは 2 つのインターフェイスを扱うのに十分な解決策のように思えますが、正しい場所で正しいものを使用していることを確認できるように、それらの使用法が実際にどのように意図されていたかを知りたいと思っています。 それらの意図が実際に同じである場合、同じ目的のために複数のセマンティクスのセットを持つ理由はありますか? (の開始時に署名が推奨されていたことは理解してい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
は、null 以外の事後条件の概念 を無視します。の実装テンプレートも、 の代替構文として
IServiceLocator
扱います。これは Liskov の違反 (基本型で宣言されていないサブタイプで例外をスローするため) と見なされますか? それとも、インターフェイスのメソッド シグネチャで宣言された例外ではなく、実際に実装に違いが必要でしょうか? 私が得ているのは、実装テンプレートが両方のインターフェースを正しく実装していると確信していますか? 呼び出しを try ブロックでラップし、例外がキャッチされたときに戻る というインターフェイスの意図をより適切に表現できますか?IServiceProvider.GetService(Type)
IServiceLocator.GetInstance()
ServiceLocatorImplBase
IServiceLocator
IServiceProvider
GetInstance
null
補遺:これに関連するもう 1 つの問題は、への対応
IServiceLocator.GetAllInstances(Type)
ですIServiceLocator.GetInstance(Type)
。具体的には、任意の型 T について、 の実装はIServiceLocator.GetAllInstances(typeof(T))
と同じ結果を返す必要がありIServiceLocator.GetInstance(typeof(IEnumerable<>).MakeGenericType(typeof(T))
ますか? (これがIServiceProvider
通信にどのように関係しているかは簡単にわかりますが、質問を単純にして、この場合は同じインターフェースの 2 つのメソッドのみを比較する方がよいと思います。)
.net - リストを使用する理由IReadOnlyListを実装する.NET 4.5では?
なぜ.NET4.5にList<T>
実装IReadOnlyList<T>
するのですか?
List<T>
読み取り専用ではありません...
.net - Microsoft.Bcl.Asyncが機能しない
ポータブルクラスライブラリでAsyncを使おうとしています。私はプロファイル104を使用しています。これには次のものが含まれます。
- .NET 4.5
- Silverlight 4
- WP 7.5
- WinRT
インストールは機能し、使用できますSystem.Threading.Tasks
が、次のエラーが発生したため、コンパイルできません。
待てない
System.Threading.Task<System.Net.HttpWebResponse>
await
このサンプルのと同じように:
なんで?
アップデート
プロファイル104がmonodroidとmonotouchで更新されています。NuGetを使用してMicrosoft.Bcl.Asyncv1.0.16をインストールします。AsyncBridge.Portablev0.2.0を追加すると、Visual Studioの警告は表示されませんが、コンパイルされません。System.Attributesのこの2つのライブラリ間に競合があります
このライブラリをどのように連携させるのですか?
ありがとう
c# - 中かっこを使用して BCL 不変コレクションを初期化できますか?
昔は、次の例のように、中括弧を使用して可変コレクションを簡単に初期化できました。
BCL 不変コレクションで使用できる同様の構文はありますか? まだプレリリースであることは理解していますが、推奨される構文があるか、少なくともこの質問は、これらの便利な初期化子を実装するためのフィードバックとして役立ちます。
それまでの間、私が見つけた最短のものは次のとおりです。
c# - Microsoft.Bcl.Async パッケージを追加した後、app.config ファイルに "bindingRedirect" が追加されるのはなぜですか?
をインストールした後、nuget がアプリケーションapp.config
ファイルに次のコードを追加した理由を知りたいと思っていましたMicrosoft.Bcl.Async
。
この XML 要素を構成から削除すると、アプリが正しく動作しなくなります。
私が理解している限りではbindingRedirect
、EXE のコンパイル時に使用していたバージョンがなくなった場合に備えて、 を使用して、新しいバージョンまたは古いバージョンのアセンブリをアプリにロードさせることができます。
しかし、私は正確に version を使用していますが2.5.19.0
、なぜリダイレクトが必要なのですか?
なぜこれが必要なのbindingRedirect
ですか?