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

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

3
%演算子を使用せずに、よく分散されたハッシュテーブルを実装することは可能ですか?
私は、C#で高速で十分に分散されたハッシュテーブルを実装したいと考えています。任意のハッシュコードを受け取り、それを「制約」して、バケットのインデックス作成に使用できるハッシュ制約関数の選択に問題があります。私がこれまでに見た2つのオプションがあります: 一方では、バケットに常に素数の要素があることを確認し、ハッシュを制約するには、単にバケットの数でモジュロします。実際、これは.NETの辞書が行うことです。このアプローチの問題は、%の使用が他の操作と比較して非常に遅いことです。あなたが見ればAgner霧命令テーブル、idiv(%のために生成されますアセンブリコードで)新しいIntelプロセッサのための〜25サイクルの命令のレイテンシを持っています。3の周りにこれを比較しmul、等をビット単位のオペレーションのための1 and、orまたはxor。 一方、バケットの数は常に2の累乗にすることができます。配列の外部でインデックスを作成しないようにハッシュのモジュラスを計算する必要がありますが、今回はより安価になります。2のべき乗のためのため% Nだけされ& (N - 1)、拘束のみ1~2サイクルかかるマスキング演算に低減されます。これはGoogleのsparsehashによって行われます。この欠点は、ユーザーに適切なハッシュを提供することを期待していることです。ハッシュをマスクすると、基本的にハッシュの一部が切り捨てられるため、ハッシュのすべてのビットを考慮しなくなります。ユーザーのハッシュが不均等に分散している場合、たとえば上位ビットのみが埋められるか、下位ビットが常に同じである場合、このアプローチの衝突率ははるかに高くなります。 私は、両方の長所を備えた使用可能なアルゴリズムを探しています。ハッシュのすべてのビットを考慮し、%を使用するよりも高速です。必ずしもモジュラスである必要はなく、範囲内0..N-1(Nはバケットの長さ)にあることが保証されているだけで、すべてのスロットに均等に分布しています。そのようなアルゴリズムは存在しますか? 助けてくれてありがとう。

3
DDDでは、リポジトリはエンティティまたはドメインオブジェクトを公開する必要がありますか?
私が理解しているように、DDDでは、集約ルートでリポジトリパターンを使用することが適切です。私の質問は、データをエンティティまたはドメインオブジェクト/ DTOとして返す必要がありますか? たぶんいくつかのコードが私の質問をさらに説明するでしょう: エンティティ public class Customer { public Guid Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } このようなことをする必要がありますか? public Customer GetCustomerByName(string name) { /*some code*/ } またはこのようなもの? public class CustomerDTO { public Guid Id { get; set; …

3
Foreachループと変数の初期化
これらの2つのバージョンのコードに違いはありますか? foreach (var thing in things) { int i = thing.number; // code using 'i' // pay no attention to the uselessness of 'i' } int i; foreach (var thing in things) { i = thing.number; // code using 'i' } または、コンパイラは気にしませんか?違いについて言えば、パフォーマンスとメモリ使用量という意味です。..基本的には単に違いがありますか、コンパイル後に2つが同じコードになりますか?
11 c#  performance  memory 

1
C#で複合代入演算子をオーバーロードできないのはなぜですか?
タイトルは誤解を招く可能性があるため、質問全体をお読みください:-)。 「複合代入演算子」によってop=、たとえばこのような構造を念頭に置いてい+=ます。純粋な代入演算子(=)は私の質問に属していません。 「理由」とは、意見ではなく、デザイナー(またはその同僚)が推論(つまり、デザイン選択のソース)を表明する際のリソース(書籍、記事など)を意味します。 私はC ++とC#に見られる非対称性に困惑しています(はい、C#はC ++ 2.0ではないことを知っています)-C ++では演算子+=をオーバーロード+し、事前に定義された演算子に依存する適切な演算子をほぼ自動的に記述します C#では逆になります-オーバーロードし+、+=合成されます。 私が間違っていない場合、+=新しいオブジェクトを作成する必要があるため、実際の場合、後者のアプローチは最適化の機会を殺します。そのため、このようなアプローチには大きな利点がありますが、MSDNはあまりにも恥ずかしがり屋なので、それについて話すことはできません。 そして、その利点が何なのか疑問に思います-だから、C#の本、テクトークビデオ、ブログエントリで説明を見つけたら、参考に感謝します。 私が見つけた最も近いものは、Eric Lippertブログへのコメントです。C#でオーバーロードされた演算子が常に静的なのはなぜですか?トム・ブラウン。静的なオーバーロードが最初に決定された場合は、構造体に対してどの演算子をオーバーロードできるかを単に指定します。これにより、クラスで何をオーバーロードできるかがさらに決まります。

3
長期実行プログラムをプログラムで監視する方法
私が現在持っているものは、この擬似コードで要約することができます: public static void Main(string[] args) { var listOfObjects = Database.GetObjectsToUploadToOnlineService(); Parallel.ForEach(Upload) } private static void Upload(MyUploadObject obj) { //Build object (takes a few milliseconds) //Format to JSON (takes a few more milliseconds) //Upload (can take up to a max of 10 minutes) //Wait for a response (can take up …

2
「out」キーワードが2つの一見異なるコンテキストで使用されるのはなぜですか?
C#では、outキーワードは2つの異なる方法で使用できます。 引数が参照によって渡されるパラメーター修飾子として class OutExample { static void Method(out int i) { i = 44; } static void Main() { int value; Method(out value); // value is now 44 } } 共分散を指定する型パラメーター修飾子として。 // Covariant interface. interface ICovariant<out R> { } // Extending covariant interface. interface IExtCovariant<out R> : ICovariant<R> { } …

4
アーキテクチャ(リアルタイム戦略ゲームのNPC)の多重継承に代わるものはありますか?
コーディングは実際にはそれほど難しくありません。難しい部分は、理にかなっており、読みやすく、理解可能なコードを書くことです。だから、私はより良い開発者を獲得し、強固なアーキテクチャを作りたいと思っています。 それで、私はビデオゲームでNPCのアーキテクチャを作成したいと思います。これは、Starcraft、Age of Empires、Command&Conquersなどのようなリアルタイム戦略ゲームです。したがって、さまざまな種類のNPCがあります。A NPCは、これらの多くの能力(メソッド)に1を持つことができますBuild()、Farm()とAttack()。 例: 労働者がすることができますBuild()し、Farm() 戦士缶Attack() 市民缶Build()、Farm()とAttack() 漁師ができるFarm()とAttack() これまでのところすべてが明確であることを願っています。 だから今、私は私のNPCタイプとその能力を持っています。しかし、技術的/プログラム的な側面を見てみましょう。 さまざまな種類のNPCに適したプログラムアーキテクチャは何でしょうか。 さて、基本クラスを持つことができました。実際、これはDRYの原則を守る良い方法だと思います。WalkTo(x,y)すべてのNPCが移動できるため、基本クラスのようなメソッドを持つことができます。しかし今、本当の問題に取り掛かりましょう。自分の能力をどこで実装しますか?(覚えておいてください:Build()、Farm()およびAttack()) 能力は同じロジックで構成されるため、各NPC(Worker、Warrior、..)にそれらを実装することは、DRYの原則に迷惑をかける/破るでしょう。 さて、基本クラス内に能力を実装できました。NPCは、能力Xを使用することができる場合、これは検証というロジックのいくつかの種類が必要になりIsBuilder、CanBuild、..私は私が表現したいものを明確だと思います。 しかし、私はこの考えにあまり気分がよくありません。これは、機能が多すぎる肥大化した基本クラスのように聞こえます。 プログラミング言語としてC#を使用しています。したがって、ここでは多重継承はオプションではありません。手段:のような追加の基本クラスがあるFisherman : Farmer, Attackerと機能しません。

2
F#Coreが汎用配列型を定義するのはなぜですか?
FSharp.Core名前空間には、最大4次元の一般的な配列型、つまりCore。[] <'T>、Core。[、] <' T>などが含まれていることに気付きました。C#とVBはうまく機能しているようです。 System.Arrayを使用-int []、string []などの厳密に型指定された特殊な配列型をどのようにサポートするかは明確ではありませんが。 私はこれが2つの質問になると思う: C#は、非ジェネリックSystem.Arrayに基づくint []のような厳密に型指定された特殊な配列型をどのようにサポートしますか? C#がこれをなんとかしているのに、なぜF#は汎用配列型を定義するのですか?
11 c#  .net  f# 

2
コンパイル時IOC
誰かがコンパイル時にIOCを実行するプロジェクトを開始しましたか(おそらくRoslynまたはLinq MethodInfoを使用して)。 IOCコンテナーでの私の経験はこれまでのところ素晴らしく、いくつかの小さな問題がありませんでした 多くのIOCコンテナは、ここで解決ロジックの多くが発生するため、起動が遅くなります コンパイルがコンストラクターの呼び出しを保証しないため、解決が可能かどうかを確認するのは難しい場合がよくあります。 多くの場合、IOCコンテナーはランタイムに小さなオーバーヘッドを追加します(一部は小さくもなく、多くの場合、すぐに起動するものはゆっくり実行されます) 理想的な解決策は、IOCの代わりにFactoryクラスを追加するコンパイル手順をビルドチェーンに追加することだと思われます。 誰もこれをやったことがありますか?そうでない場合は、なぜですか?

2
静的クラスと静的メンバーの考え方とベストプラクティス[非公開]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 私は、静的メンバーまたは静的クラス全体に関する考え方と業界のベストプラクティスについて非常に興味があります。これには欠点がありますか、それともアンチパターンに参加していますか? これらのエンティティは、機能を提供するためにクラスをインスタンス化することを要求または要求しないという意味で、「ユーティリティクラス/メンバー」と見なされます。 これに関する一般的な考えと業界のベストプラクティスは何ですか? 以下のクラスとメンバーの例を参照して、私が参照しているものを説明してください。 // non-static class with static members // public class Class1 { // ... other non-static members ... public static string GetSomeString() { // do something } } // static class // public static class Class2 { // ... other static members ... public …
11 c#  class-design 

2
単一のメソッド内で同期メソッドと非同期メソッドを効率的に混合しますか?
さて、奇妙に聞こえますが、コードは非常にシンプルで、状況をうまく説明しています。 public virtual async Task RemoveFromRoleAsync(AzureTableUser user, string role) { AssertNotDisposed(); var roles = await GetRolesForUser(user); roles.Roles = RemoveRoles(roles.Roles, role); await Run(TableOperation.Replace(roles)); } (私は以下の要約で話していることを知っていますが、上記は私がここで尋ねていることを実際に実行している実際の生産コードになるものからの実際の方法であり、実際にレビューすることに興味があります非同期/待機パターンに対する正確さのため) async/ を使用しているため、このパターンに頻繁に遭遇していawaitます。このパターンは、次の一連のイベントで構成されています。 作業に必要な情報を取得する最初の電話を待つ その情報を同期的に処理する 更新された作業を保存する最後の呼び出しを待つ 通常、上記のコードブロックは、これらのメソッドの処理方法です。私awaitは最初の呼び出しです。非同期であるためです。次に、IOまたはリソースにバインドされていないため、非同期ではない、必要な作業を実行します。最後に、私はまた、ある私の仕事、保存async、および貨物カルトIのうち呼び出しawait、それを。 しかし、これはこのパターンを処理する最も効率的で正しい方法ですか?私awaitは最後の呼び出しをスキップすることができたようですが、それが失敗したらどうなりますか?また、同期作業を元の呼び出しと連鎖さTaskせるなどの方法を使用する必要がありContinueWithますか?私はちょうど今これを正しく処理しているかどうかわからない時点にいます。 例のコードを考えると、この非同期/同期/非同期メソッド呼び出しチェーンを処理するより良い方法はありますか?

1
MVC + 3層; ViewModelsが登場する場所
ASP.NET MVC 4を使用して3層アプリケーションを設計しています。次のリソースを参照として使用しました。 CodeProject:MVC + N層+エンティティフレームワーク ASP.NET MVCでのデータアクセスの分離 これまでに次のようなデザインがあります。 プレゼンテーション層(PL) (メインMVCプロジェクト、MのMVCは、データアクセス層に移動されました): MyProjectName.Main Views/ Controllers/ ... ビジネスロジックレイヤー(BLL): MyProjectName.BLL ViewModels/ ProjectServices/ ... データアクセス層(DAL): MyProjectName.DAL Models/ Repositories.EF/ Repositories.Dapper/ ... 現在、PLはBLLを参照し、BLLはDALを参照しています。このように、下層は上の層に依存しません。 この設計では、PLはBLLのサービスを呼び出します。PLはビューモデルをBLLに渡すことができ、BLLはビューモデルをPLに戻すことができます。 また、BLLはDALレイヤーを呼び出し、DALレイヤーはモデルをBLLに戻すことができます。BLLは、ビューモデルを作成してPLに返すことができます。 今まで、このパターンは私のために働いていました。ただし、ViewModelsのいくつかがいくつかのエンティティで結合する必要があるという問題に遭遇しました。プレーンMVCアプローチでは、コントローラーでjoinsを実行してからを実行するためにLINQクエリを使用しましたselect new MyViewModel(){ ... }。しかし今、DALでは、ViewModelが定義されている場所(BLL内)にアクセスできません。 これは、DALで参加してBLLに戻すことができないことを意味します。(1つのクエリでの結合の代わりに)DALで個別のクエリを実行する必要があり、BLLはこれらの結果を使用してViewModelを構築します。これは非常に不便ですが、DALをViewModelに公開する必要はないと思います。 このジレンマを解決する方法はありますか?ありがとう。

1
yieldキーワードがreturnとbreakと共に使用され、それ自体では使用されないのはなぜですか?
C#では、あなたは、戻り値の型を持つメソッド構築することができますIEnumerable<T>し、使用をyield returnしてyield break流れを制御します。両方のコントロールを使用する簡単な例を次に示します。 public IEnumerable<int> GetEvens(int start, int end) { if(end < start) yield break; if(start & 2 != 0) start++; for(int i = start; i <= end; i+=2) { yield return i; } } 私の質問は、もともと次のように2つのキーワードをyield使用し、単一のyield「戻り値を返す」ように使用しないように設計されていた理由です。 public IEnumerable<int> GetEvens(int start, int end) { if(end < start) return; // stop completely …
11 c# 

3
Enum、Abstractクラス、およびStructsのプレフィックスを付けないのはなぜですか?
C#コミュニティは、最も経験の浅いプログラマーでさえ使用することを知っているインターフェイスを示すために、「I」プレフィックスを広く使用しています。 列挙型、抽象クラス、または構造体の接頭辞を付けないのはなぜですか(おそらくそれぞれ「E」、「A」、「S」を使用)。 たとえば、すべての抽象クラスに「A」のマークを付けた場合、そのタイプに関する貴重な情報が提供されますが、それは推測できますが、すぐにはわかりません。 私はこの変更を支持していないことに注意してください。私たちがこのように物事をしない理由を理解しようとしているだけです。 このスレッドは、「I」プレフィックスを使用する理由に答えますが、他のプレフィックスを使用しない理由には答えません。

1
Code FirstはMigrationsまたはSQL Server Data Toolsに適していますか?
新しいMVC4 Webサイトを作成するための仕様が与えられました。最初はプロジェクトが大きくなりすぎないでしょうが、ビジネスが新しいアイデアを得るにつれて成長するのではないかと思います。 .NET 4.5 ASP.NET MVC4およびEFを使用して、移行を伴うコードファーストまたはデータベースを処理するためのSql Server Data Tools(SSDT)を選択する必要があります。 SSDTを使用すると、ソリューションの一部としてプロジェクト内のデータベースを制御し、dacpacファイルを使用して、開発から本番に至るまでのすべての変更を処理できます。MVC3のコードファーストの私の経験では、データベースオプションが限られているため、開発以外では使用しませんでした。モデルの変更時に常にDbをドロップするか、Dbの変更を手動で処理することになります。しかし、MVC4 Migrationsはそうではなく、更新をDbにプッシュできるようになりました。 したがって、私の質問は、開発における時間/労力の節約に基づいて使用するのに最も効率的ですが、スケーラブルで生産の変更を処理できるものです。コードファーストとモデルからデータベースを生成する機能が好きでしたが、移行の導入により本番環境で実行可能になりましたか?

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