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

C#は、Microsoftが.NETプラットフォームと並行して作成した、マルチパラダイムで管理されたガベージコレクションのオブジェクト指向プログラミング言語です。

13
単体テストを高速に実行するにはどうすればよいですか?
私たちのプロジェクトでは、ほぼ1,000のテストがあり、非常に時間がかかるため、チェックインを実行する前にテストの実行に煩わされることがなくなりました。せいぜい、変更したコードに関連するテストを実行するだけで、最悪の場合はテストせずにチェックインするだけです。 この問題は、ソリューションが120のプロジェクト(通常、はるかに小さいプロジェクトを行い、TDDを適切に行うのは2回目です)に成長し、ビルド+テスト時間が約2〜3分になったためであると思います小さいマシンで。 テストの実行時間を短縮するにはどうすればよいですか?テクニックはありますか?もっと偽物?偽造が少ない?すべてのテストを実行するときに、より大きな統合テストが自動的に実行されるべきではないでしょうか? 編集:いくつかの回答への応答として、私たちはすでにCIとビルドサーバーを使用しています。これがテストの失敗を知る方法です。問題(実際には症状)は、失敗したビルドに関するメッセージを継続的に取得することです。部分テストの実行は、ほとんどの人が行うことですが、すべてではありません。そしてテストに関しては、実際にはかなりうまく作られており、すべてに偽物を使用しており、IOはまったくありません。
40 c#  unit-testing  tdd  nunit 

8
最新のオブジェクト指向言語はC ++の配列ストアのパフォーマンスと競合できますか?
少なくともある程度慣れ親しんでいる最新のオブジェクト指向プログラミング言語(基本的にはJava、C#、およびD)がすべて共変配列を許可していることに気付きました。つまり、文字列配列はオブジェクト配列です。 Object[] arr = new String[2]; // Java, C# and D allow this 共変配列は、静的型システムの穴です。コンパイル時に検出できない型エラーが発生する可能性があるため、実行時は配列へのすべての書き込みをチェックする必要があります。 arr[0] = "hello"; // ok arr[1] = new Object(); // ArrayStoreException これは、多くの配列ストアを実行する場合、ひどいパフォーマンスヒットのようです。 C ++には共変配列がないため、このようなランタイムチェックを行う必要はありません。つまり、パフォーマンスが低下することはありません。 必要なランタイムチェックの数を減らすために行われた分析はありますか?たとえば、私が言う場合: arr[1] = arr[0]; ストアが失敗することはないと主張することができます。私が考えていない他の多くの可能な最適化があると確信しています。 最新のコンパイラーは実際にこの種の最適化を行いますか、または、例えばクイックソートが常にO(n log n)の不要なランタイムチェックを行うという事実に耐えなければなりませんか? 現代のオブジェクト指向言語は、共変配列をサポートすることによって生じるオーバーヘッドを回避できますか?
40 c#  java  c++  d 

5
C#List <>での.Any()の使用法は何ですか?
私は同僚とこれについて議論してきましたが、C#で、.Any特定のの使用が何であるかを理解できませんでしたList&lt;&gt;。 次のステートメントのように、配列内の要素の有効性を確認できます。 if (MyList.Any()){ ...} //Returns true or false これはまったく同じです if (MyList.Count() != 0) { ... } if声明の意図についてより一般的で読みやすく明確です。 最終的に、私たちはこの考えに固執しました: .Any() 使用することもできますが、同様に機能しますが、プログラマの意図についてはあまり明確ではなく、その場合は使用しないでください。 しかし、これは正しくないように感じます。私たちは何かを見逃しているに違いありません。 私たちは?
40 c#  array  list 

3
Cスタイル言語の論理NOT演算子が「~~」ではなく「!」なのはなぜですか?
二項演算子には、ビット演算子と論理演算子の両方があります。 &amp; bitwise AND | bitwise OR &amp;&amp; logical AND || logical OR NOT(単項演算子)の動作は異なります。ビットごとに〜があります!論理的に。 NOTはANDおよびORとは反対の単項演算であると認識していますが、デザイナーがここでシングルがビット単位であり、ダブルが論理的であるという原則から逸脱し、代わりに異なるキャラクターを選んだ理由を考えることはできません。常にオペランド値を返すダブルビット演算のように、間違って読むことができると思います。しかし、それは私にとって本当の問題ではないようです。 行方不明の理由はありますか?
39 java  c#  c++  c 

6
.csファイルをプロジェクトにリンクするよりも.dllファイルを使用する利点(独自の汎用ヘルパークラス/拡張メソッドの場合)
作成するすべてのアプリケーションで使用するヘルパープロジェクトがあります。これには、いくつかの拡張メソッドと一連の汎用ヘルパークラス、コントロールなどが含まれています。ヘルパープロジェクトは随時更新/拡張します。これらは通常、小規模で無関係なプロジェクトであり、私はそれらすべてに取り組んでいる唯一の人です。 私はそれを使用するために2つのアプローチを試しました 使用する各プロジェクトに.csファイルを直接追加(リンクとして追加) .dllとしてコンパイルし、参照として追加します これらのアプローチにはいくつかの利点と欠点があります。 最初の1つ: ヘルパークラスはexeファイルにコンパイルされるため、より簡単です。したがって、正常に機能する単一の.exeファイルを非常に簡単に提供できることがよくあります。リンクとして追加するので、ヘルパーを使用するプロジェクトをビルドするたびに、ヘルパーファイルが最新バージョンになることを確信できます。 .NET 4.0で正常に動作する拡張メソッドを.NET 4.5を必要とする拡張メソッドとは別に参照できるように、ファイルを分離できるため、さらにシンプルになります。つまり、アプリ全体が.NET 4.0で実行できることを意味します。 ブレークポイントなどのすべての利点を使用して、コードを介してデバッグすることができます... 「ベストプラクティス」ではないようです 2番目: 正しいアプローチのようですが、次のとおりです。 別の.dllファイルを提供する必要があります。何らかの理由で、ユーザーにとってははるかに困難です(.dllなしでプログラムを共有する傾向があり、その後、起動時にクラッシュします)。 単一の.dllにコンパイルされるため、最高バージョンの.NETが必要になります。多くのユーザーは.NET 4.5を持たず、ヘルパークラスの一部の要素のみがこれを必要とします。理由もなくシステムを更新する また、プログラムを更新するたびに、.dllファイルも配信することを確認する必要があります-最後のバージョン以降に変更されたかどうかはわかりませんが、同じバージョンにすることもできます)。追加の作業であるアセンブリバージョンを追跡せずに、それを判断する簡単な方法はわかりません。今のところ、プログラムを更新するときは、更新されたexeのみを配信します。 では、ここで.dllファイルを使用することの実際の利点は何ですか?すべてのアプリケーションとヘルパーファイルのコードを編集するのは私だけであることに注意してください。 また、明確にするために-通常、アプリはごくわずかですが、ヘルパークラスに含まれるコードはそれらすべてに完全に汎用的です(一部の単純な文字列比較、パス、またはXML操作など) 実際、誰かが私に今、3番目の選択肢があることを認識させました。私はseparteプロジェクトにヘルパーコードを持っているので、このプロジェクトを個々のアプリケーションのソリューションに追加できます-これは、単一のプロジェクトを追加する以外は、単一ファイルの「リンクとして追加」のように機能します... Doc Brownが気づいたように、これは基本的に.dllをプロジェクトに追加する必要があることを意味します... dllファイルを使用しないことを支持するもう1つのことは、ヘルパークラスを積極的にデバッグする機能です...
38 c#  dll 

5
C#がcaseブロックにローカルスコープを持たないのはなぜですか?
私はこのコードを書いていました: private static Expression&lt;Func&lt;Binding, bool&gt;&gt; ToExpression(BindingCriterion criterion) { switch (criterion.ChangeAction) { case BindingType.Inherited: var action = (byte)ChangeAction.Inherit; return (x =&gt; x.Action == action); case BindingType.ExplicitValue: var action = (byte)ChangeAction.SetValue; return (x =&gt; x.Action == action); default: // TODO: Localize errors throw new InvalidOperationException("Invalid criterion."); } } そして、コンパイルエラーを見つけて驚いた: 「action」という名前のローカル変数がこのスコープで既に定義されています 解決するのは非常に簡単な問題でした。2番目の要素を取り除くだけでvarうまくいきました。 明らかに宣言された変数caseのブロックは親のスコープを持っているswitchが、私はこれが理由として興味があります。C#は、実行が(それは他のケースを落下することはできませんことを考える必要があり …

5
IDまたはオブジェクトを渡しますか?
ドメインエンティティを取得するビジネスロジックメソッドを提供する場合、パラメーターはオブジェクトまたはIDを受け入れる必要がありますか?たとえば、これを行う必要があります: public Foo GetItem(int id) {} またはこれ: public Foo GetItem(Foo foo) {} オブジェクト全体を渡すことをお勧めしますが、オブジェクトを取得し、IDのみを知っているこの場合はどうでしょうか?呼び出し元は空のFooを作成してIDを設定する必要がありますか、それともメソッドにIDを渡すだけですか?IDを除いて、着信Fooは空になるため、GetItem()メソッドにIDを送信するだけでFooを作成し、IDを設定する必要があるという呼び出し側の利点はありません。

4
パブリック定数は「悪い」ですか?
これは: public MyClass { public const string SomeString = "SomeValue"; } これより悪い: public MyClass { public static string SomeString { get{ return "SomeValue";}} } どちらも同じ方法で参照できます。 if (someString == MyClass.SomeString) ... ただし、2番目はプロパティであるという保護があります。しかし、実際にはこれはconstよりもはるかに優れていますか? 私は、公共の場を持つことの危険を何度も学びました。したがって、パブリックフィールドでこれらの定数を使用するコードを見たとき、すぐにそれらをプロパティにリファクタリングし始めました。しかし、途中で、定数よりも静的なプロパティを使用することの利点について疑問に思いました。 何か案は?
38 c# 

10
WPF対WinForms-Delphiプログラマーの視点?
私はWPFとWinFormsの主要なスレッドのほとんどを読みましたが、試行されたものと真の以前の技術(Winforms)と、その後継者(WPF)を決定するときに陥りがちな不幸なアンビバレンスに陥りました。 私は長年にわたりベテランのDelphiプログラマであり、ついにC#へのジャンプを始めています。Delphiの仲間であるDelphiプログラマーは、Delphiで有名なAnders HejlsbergがC#の設計者であることを知って興奮していることを理解します。DelphiのVCLカスタムコンポーネント、特にマルチコンポーネントウィザードや子コンポーネントのコンテナとして機能するコンポーネントの作成に関与するコンポーネントには強い依存症があります。 その背景から、DelphiからC#に切り替えた皆さんが、私の最初のアプリケーションを作成するためのWinFormsとWPFの決定に役立つことを願っています。コーディングや、完全なオートコンプリートや適切なデバッガーサポートなどによってAPIの機能や呼び出しに関する情報がすぐに見つかるなど、バグの回避策を見つけることができるので、私は非常に焦ります。 。 2009年初頭のSOスレッドとコメントは、C#UI開発コーディングを損なう可能性のあるフラストレーションの可能性に関して、WPFに大きな懸念を示しています。一方で、放棄されていなくてもすぐに交換される(WinForms)API技術を学ぶのに膨大な時間を費やすことは、同様に厄介であり、WPFの食欲をそそるGPUサポートを見つけます。 したがって、私のアンビバレンス。私はどちらの技術もまだ習得していないので、新たなスタートを切るまれな機会があり、大きな「未学習」曲線に直面する必要はありません。一方、WPFの使用がイライラしたり、私のような短気なRAD開発者に他の大きなマイナスの結果をもたらす場合は、WPFが同じレベルのサポートと使いやすさを達成するまでWinFormsを使い続けます。プログラマーとしての私の心理を具体的に示すために、私はVBを使用し、その後Delphiを使用して、初期のWindowsアプリの開発中に多くの開発者が苦労したWindows UIライブラリであるMFCによるコーディングの非常に大きな痛みを完全に回避しました。MFCを回避できたことを後悔したことはありません。 Anders HejlsbergがWPFおよび/またはWinFormsのアーキテクチャに手を携えているかどうか、そしてどちらかのコードベースで具体化された創造的なビジョンと使いやすさに不一致があるかどうかを知ることも安心です。最後に、Delphiプログラマーのために、WinFormsとは対照的にWPFを使用するとき、特にデバッガーのサポートに関して、「IDEショック」がどれだけ必要かを教えてください。2011年に更新された求人市場のコメントも歓迎します。
38 c#  wpf  winforms  delphi  microsoft 

6
TDDを使用した複雑なコードの良い例[終了]
大規模な現実の複雑なプロジェクトでTDDを使用する良い例は何でしょうか?これまでに見た例はすべて、本や論文を目的としたおもちゃのプロジェクトです... TDDを多用するオープンソースプロジェクトに名前を付けることはできますか?C ++が望ましいですが、JavaとC#または他の類似言語を読むことができます。
37 java  c#  open-source  c++  tdd 

5
メソッドを引数名(型ではなく)で区別するだけで十分ですか?
メソッドを引数名(型ではなく)で区別するだけで十分ですか、それとも明示的に名前を付ける方がよいでしょうか? たとえば、T Find&lt;T&gt;(int id)VS T FindById&lt;T&gt;(int id)。 ById引数名だけを保持するのではなく、より明示的に名前を付ける(つまり、追加する)正当な理由はありますか? 私が考えることができる理由の1つは、メソッドのシグネチャが同じであるが、意味が異なる場合です。 FindByFirstName(string name) そして FindByLastName(string name)

3
ビジネスレイヤーでのキャッシュとデータレイヤーでのキャッシュ
私は常に、DALでキャッシングが行われるプロジェクトに取り組んできました。基本的には、データベースへの呼び出しを行うときに、キャッシュにデータが既に存在するかどうかをチェックし、存在する場合は呼び出しを行いません。代わりにそのデータを返します。 私は最近ビジネス層でのキャッシュについて読んだので、基本的にビジネスオブジェクト全体をキャッシュします。すぐにわかる利点の1つは、応答時間の短縮です。 どちらを優先するかはいつですか?およびビジネス層でのキャッシングは一般的な慣行ですか?

5
別のクラスのClassCollectionを作成することをお勧めしますか?
Carクラスがあると言いましょう: public class Car { public string Engine { get; set; } public string Seat { get; set; } public string Tires { get; set; } } 駐車場に関するシステムを作成しているとしましょう。私は多くのCarクラスを使用するので、クラスを作成しCarCollectionますFindCarByModel。 public class CarCollection { public List&lt;Car&gt; Cars { get; set; } public Car FindCarByModel(string model) { // code here return new Car(); …

6
子の親への参照を初期化する最良の方法は何ですか?
私は多くの異なる親/子クラスを持つオブジェクトモデルを開発しています。各子オブジェクトには、その親オブジェクトへの参照があります。親参照を初期化するいくつかの方法を考えることができます(そして試してみました)が、各アプローチには重大な欠点があります。以下で説明するアプローチのうち、どれが最良であるか、またはそれよりも優れている場合を考えます。 以下のコードがコンパイルされることを確認しませんので、コードが構文的に正しくない場合は、私の意図を確認してください。 常に表示するわけではありませんが、一部の子クラスコンストラクターは(親以外の)パラメーターを取ることに注意してください。 呼び出し元は、親を設定し、同じ親に追加する責任があります。 class Child { public Child(Parent parent) {Parent=parent;} public Parent Parent {get; private set;} } class Parent { // singleton child public Child Child {get; set;} //children private List&lt;Child&gt; _children = new List&lt;Child&gt;(); public List&lt;Child&gt; Children { get {return _children;} } } 欠点:親の設定は、消費者にとって2段階のプロセスです。 var child = new …


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