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

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

4
C#がforeachで変数を再利用する理由はありますか?
C#でラムダ式または無名メソッドを使用する場合、変更されたクロージャーの落とし穴へのアクセスに注意する必要があります。例えば: foreach (var s in strings) { query = query.Where(i => i.Prop == s); // access to modified closure ... } 変更されたクロージャのため、上記のコードではWhere、クエリのすべての句がの最終値に基づいていますs。 ここで説明したように、これsは、foreach上記のループで宣言された変数がコンパイラで次のように変換されるために発生します。 string s; while (enumerator.MoveNext()) { s = enumerator.Current; ... } このようにする代わりに: while (enumerator.MoveNext()) { string s; s = enumerator.Current; ... } ここで指摘したように、ループの外側で変数を宣言してもパフォーマンス上の利点はありません。通常の状況では、これを行うために考えられる唯一の理由は、ループのスコープ外で変数を使用する場合です。 string s; while (enumerator.MoveNext()) { …

19
IDisposableインターフェイスの適切な使用
Microsoftのドキュメントを読むと、IDisposableインターフェイスの「主な」使用はアンマネージリソースのクリーンアップであることがわかります。 私にとって、「アンマネージド」とは、データベース接続、ソケット、ウィンドウハンドルなどのことを意味します。ただし、マネージリソースDispose()を解放するためにメソッドが実装されているコードを見ました。あなたのために。 例えば: public class MyCollection : IDisposable { private List<String> _theList = new List<String>(); private Dictionary<String, Point> _theDict = new Dictionary<String, Point>(); // Die, clear it up! (free unmanaged resources) public void Dispose() { _theList.clear(); _theDict.clear(); _theList = null; _theDict = null; } 私の質問は、これにより、ガベージコレクターが使用するメモリMyCollectionが、通常よりも速く解放されるのでしょうか。 編集:これまでのところ、IDisposableを使用してデータベース接続やビットマップなどのアンマネージリソースをクリーンアップする良い例がいくつか投稿されています。しかし_theList、上記のコードに100万の文字列が含まれていて、ガベージコレクターを待つのではなく、今すぐそのメモリを解放したいとします。上記のコードはそれを達成しますか?


30
「ブレークポイントは現在ヒットしません。このドキュメントにはシンボルがロードされていません。」警告?
Express版のC#デスクトップアプリケーションは機能しましたが、5秒後に機能しませんでした。 私は以下を試しました: デバッグ構成、デバッグフラグ、および完全なデバッグ情報がすべてのアセンブリに設定されていることを確認します。 マシン全体から、プロジェクトに関連するすべてのbinおよびobjフォルダーとすべてのDLLを削除します。 問題の原因となっているプロジェクトを最初から作成し直します。 リブート。 ソリューションには2つのWinFormsプロジェクトがあります。そのうちの1つはデバッグ情報をロードし、1つはロードしません。どちらも、プロジェクトファイルでまったく同じ方法でデバッグ情報を取得しようとしているアセンブリを参照しています。何か案は? ここに追加したいのは、主にこの質問を確認するときに戻ってきたときです。アセンブリが読み込まれるまでシンボルは読み込まれず、アセンブリは必要になるまで読み込まれません。メインアセンブリの1つの関数でのみ使用されるライブラリにブレークポイントがある場合、その関数が呼び出されるまで、シンボルは読み込まれません(ブレークポイントがヒットしていないことが示されます)。


14
型チェック:typeof、GetType、またはis?
多くの人が次のコードを使用するのを見てきました。 Type t = typeof(obj1); if (t == typeof(int)) // Some code here しかし、私もあなたがこれを行うことができることを知っています: if (obj1.GetType() == typeof(int)) // Some code here またはこれ: if (obj1 is int) // Some code here 個人的には最後が一番綺麗だと思いますが、足りないものはありますか?どちらが最適ですか、それとも個人的な好みですか?
1513 c#  types  typeof  gettype 

5
コードを高速化してみてください。
try-catchの影響をテストするためにいくつかのコードを書きましたが、驚くべき結果がいくつかありました。 static void Main(string[] args) { Thread.CurrentThread.Priority = ThreadPriority.Highest; Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.RealTime; long start = 0, stop = 0, elapsed = 0; double avg = 0.0; long temp = Fibo(1); for (int i = 1; i < 100000000; i++) { start = Stopwatch.GetTimestamp(); temp = Fibo(100); stop = Stopwatch.GetTimestamp(); elapsed …

30
C#の隠された機能?[閉まっている]
現在のところ、この質問は、Q&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前休業。 ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 これは、この質問から次のことを学んだ後に思いつきました。 where T : struct 私たちC#開発者は、C#の基本を知っています。つまり、宣言、条件、ループ、演算子などです。 私たちの中には、ジェネリックス、匿名型、ラムダ、LINQなどをマスターする人もいます。 しかし、C#のファン、中毒者、専門家でさえほとんど知らないC#の最も隠された機能またはトリックは何ですか? これまでに明らかになった機能は次のとおりです。 キーワード yieldマイケルStum varマイケルStum using()ココスの声明 readonlyによってkokos asマイク・ストーン as/ isによってエドSwangren as/ is(改良)ロケットパンツ defaultdeathofrats global:: 沿って Pzycoman using() ブロックする AlexCuse volatile 沿って JakubŠturc extern aliasによってJakubŠturc の属性 DefaultValueAttributeマイケルStum ObsoleteAttributeDannySmurf DebuggerDisplayAttributeステュー DebuggerBrowsableそしてbdukesDebuggerStepThroughによって ThreadStaticAttributemarxidad FlagsAttributeマーティン・クラーク ConditionalAttributeAndrewBurns 構文 ?? (nullの合体)演算子 kokos演算子 フラグの番号 ニック・ベラルディ報告 where T:new …
1475 c#  hidden-features 



27
List <T>を継承しないのはなぜですか?
私のプログラムを計画するとき、私はしばしば次のような一連の思考から始めます。 サッカーチームは、サッカー選手のリストにすぎません。したがって、私はそれを次のように表現する必要があります: var football_team = new List&lt;FootballPlayer&gt;(); このリストの順序は、プレーヤーが名簿にリストされている順序を表しています。 しかし、後でチームが記録する必要があるのは、単なるプレーヤーのリストに加えて、他のプロパティもあることに気づきました。たとえば、今シーズンのスコアの累計、現在の予算、均一な色、stringチームの名前を表すなど。 だから私は思う: さて、サッカーチームは選手のリストのようなものですが、それに加えて、名前(a string)と現在の合計スコア(an int)があります。.NETはサッカーチームを格納するためのクラスを提供していないため、自分でクラスを作成します。最も類似し、関連する既存の構造はList&lt;FootballPlayer&gt;なので、それを継承します。 class FootballTeam : List&lt;FootballPlayer&gt; { public string TeamName; public int RunningTotal } しかし、ガイドラインでは、から継承してはならないList&lt;T&gt;ことがわかっています。このガイドラインは2つの点で完全に混乱しています。 何故なの? どうやらList、何らかの形でパフォーマンスが最適化されています。どうして?拡張すると、どのようなパフォーマンスの問題が発生しListますか?正確には何が壊れますか? 私が見たもう1つの理由Listは、Microsoftから提供されたものであり、私はそれを制御できないため、「パブリックAPI」を公開した後で後で変更することはできません。しかし、私はこれを理解するのに苦労しています。パブリックAPIとは何ですか。なぜ気にする必要があるのですか。現在のプロジェクトにこのパブリックAPIが含まれていない可能性がある場合、このガイドラインを無視しても安全ですか?私は、継承を行う場合List と、、それは私が公共のAPIを必要と判明し、どのような困難私が持っているのだろうか? なぜそれが重要なのですか?リストはリストです。何が変わる可能性がありますか?何を変更したいですか? そして最後に、Microsoftがからの継承を望まないのであればList、なぜ彼らはクラスを作らなかったのでしょうか。sealedですか? 他に何を使うべきですか? どうやら、カスタムコレクションの場合、Microsoft Collectionはの代わりに拡張する必要のあるクラスを提供していListます。しかし、このクラスは非常に裸であり、たとえばなどAddRange、多くの有用なものはありません。jvitor83の答えは、その特定のメソッドのパフォーマンスの根拠を提供しますが、遅いのAddRangeは遅いよりも良いですAddRangeどうしてですか からのCollection継承はList、からの継承よりもはるかに多くの作業であり、私には利点がないと思います。確かにMicrosoftは理由もなく余分な作業をするように言わないので、何かを誤解しているように感じずにはいられず、継承Collectionは私の問題の正しい解決策ではありません。 実装などの提案を見てきました IList。いいえ。これは何十行ものボイラープレートコードで、何も得られません。 最後に、List何かを何かにラップすることを提案する人もいます: class FootballTeam { public List&lt;FootballPlayer&gt; Players; } これには2つの問題があります。 それは私のコードを不必要に冗長にします。my_team.Players.Countただ電話をする代わりに今すぐ電話しなければなりませんmy_team.Count。ありがたいことに、C#を使用すると、インデックス作成を透過的にするようにインデクサーを定義し、内部のすべてのメソッドを転送できますList...しかし、これは大量のコードです。すべての作業で何が得られますか? それだけでは意味がありません。サッカーチームは、選手のリストを「持っていません」。これは、ある選手のリスト。「John McFootballerがSomeTeamのプレーヤーに参加した」とは言わないでください。あなたは「ジョンがSomeTeamに参加した」と言います。「文字列の文字」に文字を追加するのではなく、文字列に文字を追加します。図書館の本に本を追加するのではなく、本を図書館に追加します。 …
1400 c#  .net  list  oop  inheritance 


30
別のスレッドからGUIを更新するにはどうすればよいですか?
をLabel別のものから更新する最も簡単な方法はどれThreadですか? 私はでForm実行してthread1おり、そこから別のスレッド(thread2)を開始しています。 thread2がいくつかのファイルを処理している間Labelに、の作業のForm現在のステータスでを更新したいと思いますthread2。 どうすればできますか?

28
C#ではクラスではなく構造体をいつ使用すればよいですか?
C#でクラスではなく構造体を使用する必要があるのはいつですか?私の概念モデルでは、構造体は、項目が単なる値型のコレクションであるときに使用されます。それらを論理的にまとめて、まとまりのある全体にする方法。 ここでこれらのルールに遭遇しました: 構造体は単一の値を表す必要があります。 構造体のメモリフットプリントは16バイト未満である必要があります。 構造体は作成後に変更しないでください。 これらのルールは機能しますか?構造体は意味的にどういう意味ですか?
1391 c#  struct 

17
静的な読み取り専用とconst
私は周りに読んだconstとstatic readonlyフィールド。定数値のみを含むクラスがいくつかあります。私たちのシステム内のさまざまなものに使用されます。だから私は私の観察が正しいかどうか疑問に思っています: これらの種類の定数値は、常にstatic readonly公開されているすべてのものに適用する必要がありますか?そしてconst、内部/保護/プライベート値にのみ使用しますか? 何がお勧めですか?static readonlyフィールドを使用するのではなく、プロパティを使用する必要がありますか?
1387 c#  constants 

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