タグ付けされた質問 「c#」

C#(「seesharp」と発音)は、Microsoftによって開発された、静的に型指定された高レベルのマルチパラダイムプログラミング言語です。C#コードは通常、Microsoftの.NETファミリのツールとランタイムを対象としています。これには、.NET Framework、.NET Core、Xamarinなどが含まれます。このタグは、C#またはC#の正式な仕様で記述されたコードに関する質問に使用します。

10
C#で列挙しながらリスト<T>からアイテムを削除するインテリジェントな方法
ループで列挙しながらコレクションからアイテムを削除しようとする典型的なケースがあります。 List&lt;int&gt; myIntCollection = new List&lt;int&gt;(); myIntCollection.Add(42); myIntCollection.Add(12); myIntCollection.Add(96); myIntCollection.Add(25); foreach (int i in myIntCollection) { if (i == 42) myIntCollection.Remove(96); // The error is here. if (i == 25) myIntCollection.Remove(42); // The error is here. } 変更が行われた後の反復の開始InvalidOperationException時に、基になるコレクションがいつ変更されるかを列挙子が気に入らないため、がスローされます。 繰り返しながらコレクションに変更を加える必要があります。これを回避するために使用できるパターンはたくさんありますが、どれも良い解決策を持っていないようです。 このループ内で削除しないでください。代わりに、メインループの後に処理する別の「リストの削除」を保持してください。 これは通常は良い解決策ですが、私の場合、アイテムを実際に削除するためのメインループがコードのロジックフローを変更するまで、アイテムを「待機中」として即座に削除する必要があります。 アイテムを削除する代わりに、アイテムにフラグを設定し、非アクティブとしてマークするだけです。次に、パターン1の機能を追加して、リストをクリーンアップします。 これは私のすべてのニーズに対応しますが、アイテムにアクセスするたびに非アクティブフラグをチェックするために、多くのコードを変更する必要があることを意味します。これは私の好みにはあまりにも多くの管理です。 どういうわけか、から派生したクラスにパターン2のアイデアを組み込みList&lt;T&gt;ます。このスーパーリストは、非アクティブフラグ、事後のオブジェクトの削除を処理し、非アクティブとしてマークされたアイテムを列挙型コンシューマーに公開しません。基本的には、パターン2(およびその後のパターン1)のすべてのアイデアをカプセル化するだけです。 このようなクラスは存在しますか?誰かがこれのためのコードを持っていますか?それとももっと良い方法はありますか? myIntCollection.ToArray()代わりにアクセスmyIntCollectionすると問題が解決し、ループ内で削除できるようになると言われています。 これは私には悪いデザインパターンのように思えますか、それとも問題ないのでしょうか? 詳細: リストには多くのアイテムが含まれ、そのうちのいくつかのみを削除します。 ループ内では、追加、削除など、あらゆる種類のプロセスを実行するため、ソリューションはかなり一般的である必要があります。 …
87 c#  list  foreach  enumeration 

12
LINQを使用してツリーを検索する
このクラスから作成されたツリーがあります。 class Node { public string Key { get; } public List&lt;Node&gt; Children { get; } } すべての子供とそのすべての子供を検索して、条件に一致するものを取得したいと思います。 node.Key == SomeSpecialKey どうすれば実装できますか?
87 c#  .net  linq 

7
複数のアセンブリを1つにマージする方法は?
次のサービススタックのDLLといくつかのAzureのDLLをEXEプロジェクトにコピーしたという点で、EXEプロジェクト(紺碧のアプリケーションの起動タスク)を使用してサービススタックを消費しています。 このEXEプロジェクトをビルドすると、Azure DLLはEXEにバンドルされますが、サービススタックのDLLはEXEにバンドルされません。これは、任意のマシンでEXEを実行するには、すべてのサービススタックのDLLを手動でコピーする必要があるためです。 このサービススタックのdllを使用して使用しました JsonServiceClient client = new JsonServiceClient(servicepath); これらすべてのDLLをEXEにバンドルするにはどうすればよいですか?

4
VB.NETコードをC#に移行するときに、forループの動作が異なるのはなぜですか?
プロジェクトをVisualBasicからC#に移行してforいる最中であり、使用されているループの宣言方法を変更する必要がありました。 VB.NETでは、forループは次のように宣言されています。 Dim stringValue As String = "42" For i As Integer = 1 To 10 - stringValue.Length stringValue = stringValue &amp; " " &amp; CStr(i) Console.WriteLine(stringValue) Next どの出力: 42 1 42 1 2 42 1 2 3 42 1 2 3 4 42 1 2 3 4 5 42 …
87 c#  vb.net  loops  for-loop 

11
C#でイテレータを使用してテキストファイルを逆に読み取る方法
約400K行と200Mの大きなファイルを処理する必要があります。しかし、時にはボトムアップで処理する必要があります。ここでイテレータ(イールドリターン)を使用するにはどうすればよいですか?基本的に、私はすべてをメモリにロードするのは好きではありません。.NETでイテレータを使用する方が効率的であることを私は知っています。
87 c#  .net 

7
MemoryCacheは構成のメモリ制限に従わない
私は、.NET 4.0で働いているMemoryCacheのアプリケーションにクラスと最大キャッシュサイズを制限しようとしているが、私のテストでは、キャッシュが実際の制限に従うことであることを表示されません。 私はMSDNによると、キャッシュサイズを制限することになっている設定を使用しています。 CacheMemoryLimitMegabytes:オブジェクトのインスタンスが拡張できる最大メモリサイズ(メガバイト単位)。」 PhysicalMemoryLimitPercentage: "キャッシュが使用できる物理メモリの割合。1から100までの整数値で表されます。デフォルトはゼロです。これは、 MemoryCacheインスタンスが、にインストールされているメモリの量に基づいて独自のメモリ1を管理することを示します。コンピューター。" 1.これは完全に正しいわけではありません。4未満の値は無視され、4に置き換えられます。 キャッシュをパージするスレッドはx秒ごとに起動され、ポーリング間隔やその他の文書化されていない変数にも依存するため、これらの値は概算であり、ハード制限ではないことを理解しています。ただし、これらの差異を考慮しても、テストアプリでCacheMemoryLimitMegabytes とPhysicalMemoryLimitPercentageを一緒に、または単独で設定した後、最初のアイテムがキャッシュから削除されると、キャッシュサイズに非常に一貫性がなくなります。確かに、各テストを10回実行し、平均値を計算しました。 これらは、3GBのRAMを搭載した32ビットのWindows 7PCで以下のサンプルコードをテストした結果です。キャッシュのサイズは、各テストでCacheItemRemoved()を最初に呼び出した後に取得されます。(キャッシュの実際のサイズはこれより大きくなることを認識しています) MemLimitMB MemLimitPct AVG Cache MB on first expiry 1 NA 84 2 NA 84 3 NA 84 6 NA 84 NA 1 84 NA 4 84 NA 10 84 10 20 81 10 30 81 10 39 82 …
87 c#  .net  caching  memorycache 

5
Console.WriteLine()と非常に多くの引数のオーバーロードが必要ですか?
ドキュメントを閲覧していると、Console.WriteLine()メソッドにいくつかのオーバーロードがあることに気づきました。特に、私の好奇心と部分的な混乱はこれらに関係しています: public static void WriteLine(string format, params object[] arg); public static void WriteLine(string format, object arg0); public static void WriteLine(string format, object arg0, object arg1); public static void WriteLine(string format, object arg0, object arg1, object arg2); public static void WriteLine(string format, object arg0, object arg1, object arg2, object arg3); 冗長なようです。最初のものの上に他の4つのオーバーロードの必要性は何ですか?最初の方法は、他の方法が実行できるすべてのことを実行できます。最大4つの引数(最後の引数)を処理する追加のオーバーロードを提供することによって、彼らが取り組もうとしていたパフォーマンス上の懸念はありますか?最大4つの引数の配列を通過するオーバーヘッドは、これらのオーバーロードの必要性を提供するのに十分な大きさですか?
87 c# 

2
Roslynに非同期ステートマシンクラス(構造体ではない)があるのはなぜですか?
この非常に単純な非同期メソッドについて考えてみましょう。 static async Task myMethodAsync() { await Task.Delay(500); } これをVS2013(Roslyn以前のコンパイラ)でコンパイルすると、生成されたステートマシンは構造体になります。 private struct &lt;myMethodAsync&gt;d__0 : IAsyncStateMachine { ... void IAsyncStateMachine.MoveNext() { ... } } VS2015(Roslyn)でコンパイルすると、生成されるコードは次のようになります。 private sealed class &lt;myMethodAsync&gt;d__1 : IAsyncStateMachine { ... void IAsyncStateMachine.MoveNext() { ... } } ご覧のとおり、Roslynはクラスを生成します(構造体ではありません)。古いコンパイラ(CTP2012だと思います)でのasync / awaitサポートの最初の実装もクラスを生成し、パフォーマンス上の理由から構造体に変更されたことを正しく覚えていれば。(場合によっては、ボクシングとヒープの割り当てを完全に回避できます…)(これを参照) Roslynでこれが再び変更された理由を誰かが知っていますか?(これに関しては問題ありません。この変更は透過的であり、コードの動作を変更しないことを知っています。興味があります) 編集: @Damien_The_Unbeliever(およびソースコード:))imhoからの回答がすべてを説明しています。説明されているRoslynの動作は、デバッグビルドにのみ適用されます(コメントに記載されているCLRの制限のために必要です)。リリースでは、構造体も生成します(そのすべての利点があります)。したがって、これは編集と続行の両方をサポートし、本番環境でのパフォーマンスを向上させるための非常に賢いソリューションのようです。興味深いもの、参加してくれたすべての人に感謝します!

12
Visual Studio(2008)の大規模ソリューションのベストプラクティス[終了]
現在のところ、この質問は私たちのQ&A形式には適していません。回答は事実、参考資料、または専門知識によって裏付けられることを期待していますが、この質問は、討論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善して再開できると思われる場合は、ヘルプセンターにアクセスしてガイダンスを入手してください。 7年前に閉鎖されました。 約100以上のプロジェクトでソリューションがあり、そのほとんどがC#です。当然、開くことも構築することも時間がかかるので、そのような獣のベストプラクティスを探しています。私が答えを得ることを望んでいる質問の線に沿って、次のとおりです。 プロジェクト間の参照をどのように処理するのが最適ですか 「ローカルコピー」をオンにするかオフにするか。 すべてのプロジェクトを独自のフォルダーにビルドする必要がありますか、それともすべて同じ出力フォルダーにビルドする必要があります(すべて同じアプリケーションの一部です) ソリューションのフォルダは、ものを整理するための良い方法ですか? ソリューションを複数の小さなソリューションに分割することはオプションですが、それは独自のリファクタリングと構築の頭痛の種を伴うので、おそらく別のスレッドのためにそれを保存することができます:-)

9
.NETでは、nullのハッシュコードは常にゼロである必要があります
セットメンバーとしてSystem.Collections.Generic.HashSet&lt;&gt;受け入れるようなコレクションを考えるとnull、のハッシュコードはnullどうあるべきかを尋ねることができます。フレームワークが使用しているよう0です: // nullable struct type int? i = null; i.GetHashCode(); // gives 0 EqualityComparer&lt;int?&gt;.Default.GetHashCode(i); // gives 0 // class type CultureInfo c = null; EqualityComparer&lt;CultureInfo&gt;.Default.GetHashCode(c); // gives 0 これは、null許容列挙型では(少し)問題になる可能性があります。定義すると enum Season { Spring, Summer, Autumn, Winter, } その場合、Nullable&lt;Season&gt;(とも呼ばれますSeason?)は5つの値を取ることができますが、そのうちの2つ、つまりnullとSeason.Springは同じハッシュコードを持ちます。 このような「より良い」平等比較器を書きたくなります。 class NewNullEnumEqComp&lt;T&gt; : EqualityComparer&lt;T?&gt; where T : struct { public override …
87 c#  .net  hash  null 

17
C#でデータテーブルをJSONに変換する
データベースからにレコードを取得したいDataTable。 次にDataTable、をJSONオブジェクトに変換します。 JSONオブジェクトをJavaScript関数に返します。 私はこのコードを次のように呼び出して使用します。 string result = JsonConvert.SerializeObject(DatatableToDictionary(queryResult, "Title"), Newtonsoft.Json.Formatting.Indented); DataTableをJSONに変換するには、正しく機能し、次を返します。 { "1": { "viewCount": 703, "clickCount": 98 }, "2": { "viewCount": 509, "clickCount": 85 }, "3": { "viewCount": 578, "clickCount": 86 }, "4": { "viewCount": 737, "clickCount": 108 }, "5": { "viewCount": 769, "clickCount": 130 } } しかし、私はそれが以下を返すことを望みます: {"records":[ …
87 c#  json  datatable 


16
Javaを学ぶC#開発者、見落としがちな最大の違いは何ですか?[閉まっている]
クローズ。この質問はもっと焦点を合わせる必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てるようにします。 6年前に閉鎖されました。 この質問を改善する Javaを学びたいと考えているC#開発者にとって、指摘すべき2つの言語の間に大きな根本的な違いはありますか? 物事は同じだと思っている人もいるかもしれませんが、見逃してはならない重要な側面がいくつかありますか?(またはあなたは本当に台無しにすることができます!) たぶん、OOP構造、GCの動作方法、参照、デプロイメント関連などの観点から。
87 c#  java 

6
データテーブルにnull値が含まれているかどうかを確認する最良の方法
データテーブルにnull値が含まれているかどうかを確認する最良の方法は何ですか? このシナリオでは、ほとんどの場合、1つの列にすべてnull値が含まれます。 (このデータテーブルはサードパーティのアプリケーションによって返されます-アプリケーションがデータテーブルを処理する前に検証を加えようとしています)

6
System.Doubleを「0」(数値、整数?)と比較する正しい方法
申し訳ありませんが、これは簡単な愚かな質問かもしれませんが、確かに知る必要があります。 私はこのif表現を持っています、 void Foo() { System.Double something = GetSomething(); if (something == 0) //Comparison of floating point numbers with equality // operator. Possible loss of precision while rounding value {} } その表現はと等しいですか void Foo() { System.Double something = GetSomething(); if (something &lt; 1) {} } ?問題が発生する可能性があるため、ifたとえば値0.9でと入力します。
87 c#  compare 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.