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

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

7
C#コードでHTMLを作成する最良の方法は何ですか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?質問を更新して、1つの問題のみに焦点を当てるこの投稿を編集する。 5年前に閉鎖されました。 私は、マークアップは、コードビハインドではなく、マークアップのままにしておくべきだと考えています。 コードビハインドでHTMLを構築することは許容できると思う状況になりました。ベストプラクティスが何であるか、または何をすべきかについて、コンセンサスを持ちたいと思います。 コードビハインドでhtmlをビルドすることが受け入れられるのはいつですか?このhtmlを作成する最良の方法は何ですか?(例:文字列、StringBuilder、HTMLWriterなど)
15 c#  asp.net  html 

4
型マッピングと拡張メソッドに関するベストプラクティス
型のマッピングとC#での拡張メソッドの使用に関するベストプラクティスについて質問したいです。このトピックは過去数年にわたって何度も議論されてきましたが、私は多くの投稿を読みましたが、まだ疑問があります。 私が遭遇した問題は、私が所有するクラスを「変換」機能で拡張することでした。あるロジックで使用されるオブジェクトを表すクラス「Person」があるとしましょう。また、外部APIからの応答を表すクラス「Customer」もあります(実際には、複数のAPIがあるため、各APIの応答を共通のタイプ:Personにマッピングする必要があります)。両方のクラスのソースコードにアクセスでき、理論的には独自のメソッドを実装できます。データベースに保存できるように、CustomerをPersonに変換する必要があります。プロジェクトは自動マッパーを使用しません。 私は4つの可能な解決策を考えています: Consumerクラスの.ToPerson()メソッド。シンプルですが、私には単一責任パターンを壊しているように見えます。特に、Consumerクラスは他のクラス(別の外部APIに必要なもの)にもマップされるため、複数のマッピングメソッドを含める必要があります。 Consumerを引数として取るPersonクラスのコンストラクターをマッピングします。また、簡単で、単一責任パターンを壊すようにも見えます。複数のマッピングコンストラクターが必要です(別のAPIからのクラスがあり、Consumerと同じデータをわずかに異なる形式で提供するため) 拡張メソッドを持つコンバータークラス。この方法で、Consumerクラスの.ToPerson()メソッドを記述でき、独自のNewConsumerクラスで別のAPIが導入された場合、別の拡張メソッドを記述して、すべてを同じファイルに保存できます。拡張メソッドは一般的に悪であり、絶対に必要な場合にのみ使用すべきだという意見を聞いたことがあります。それ以外の場合、私はこのソリューションが好きです Converter / Mapperクラス。変換を処理する別のクラスを作成し、ソースクラスインスタンスを引数として受け取り、宛先クラスインスタンスを返すメソッドを実装します。 要約すると、私の問題は質問の数に減らすことができます(すべて、上記で説明した内容に関連して)。 変換メソッドを(POCO?)オブジェクト(Consumerクラスの.ToPerson()メソッドなど)内に配置することは、単一の責任パターンを壊すことを考慮していますか? (DTOのよ​​うな)クラスでの変換コンストラクターの使用は、単一の責任パターンの破壊と見なされますか?特に、そのようなクラスを複数のソースタイプから変換できる場合、複数の変換コンストラクタが必要になりますか? 元のクラスのソースコードにアクセスしながら拡張メソッドを使用するのは悪い習慣と見なされていますか?このような動作は、ロジックを分離するための実行可能なパターンとして使用できますか、それともアンチパターンですか?

4
特定のランドマークの範囲内のすべてのランドマークを効率的に検索するにはどうすればよいですか?
特定のランドマークの10 km /マイル(この話では重要ではありません)内のすべてのランドマークを見つけるジオ検索プロジェクトから始めようとしています。 たとえば、1,000,000のランドマークのデータベースがあるとします。特定の座標を持つランドマークの10マイルの範囲ですべてのランドマークを見つけるには、検索からのランドマークと1,000,000ランドマーク間の距離を計算する必要があります。 それを行うより良い方法はありますか? 私が考えていた代替手段は、国、地域、都市、近隣、ビジネス、歴史などのランドマークを、ビジネスが近隣または都市の一部になることができるように分類することです。都市は、地域、国などの一部です。これにより、計算のリストを絞り込むことができますが、検索を高速かつ正確にするためには、多くの作業を行う必要があります。 Google Maps APIは役立ちますか?

7
単純なドメインオブジェクトを表すプリミティブvsクラス?
domain-speciifcオブジェクトとプレーンな文字列または数字を使用する場合の一般的なガイドラインまたは経験則は何ですか? 例: 年齢階級と整数? FirstNameクラスとString? UniqueID vs String PhoneNumberクラスvs文字列vs Long? DomainNameクラスとString? ほとんどのOOP実践者は、間違いなくPhoneNumberとDomainNameの特定のクラスを言うと思います。それらを有効にするものとそれらを比較する方法に関するルールが増えると、単純なクラスをより簡単かつ安全に処理できるようになります。しかし、最初の3つについては、さらに議論があります。 私は「年齢」クラスに出会ったことはありませんが、非負でなければならないので理にかなっていると主張することができます(負の年齢について議論できることはわかっていますが、プリミティブ整数とほぼ同等である良い例です)。 文字列は「名」を表すのが一般的ですが、空の文字列は有効な文字列ですが、有効な名前ではないため、完全ではありません。通常、比較は大文字小文字を無視して行われます。空のチェック、大文字と小文字を区別しない比較などを行う方法はありますが、これを行うにはコンシューマーが必要です。 答えは環境に依存しますか?私は主に、おそらく10年以上にわたって存続し、維持されるエンタープライズ/高価値ソフトウェアに関心を持っています。 おそらく私はこれを考えすぎていますが、クラスとプリミティブのどちらを選択するかについてのルールがあるかどうかを知りたいと思います。

3
純粋なPOCOモデルを持つことの利点は何ですか?
純粋なPOCOモデルを持つことの主な利点は何ですか?私は、モデルはクリーンでシンプルであるべきだと思いますが、モデルクラス内の子オブジェクトのメンテナンスを維持する傾向があります。例えば、私が持っている場合ClassAとClassB、以下のように定義されました: public class ClassA { public string MyProp { get; set; } public IEnumerable<ClassB> Children { get; } public void AddChild(ClassB newChild) { /*... */ } public void RemoveChild(ClassB child) { /* ... */ } } public class ClassB { public string SomeProp { get; set; } } addメソッドとremoveメソッドがあることに本質的に問題はありますか?代わりにリストを公開し、クライアントコードに、null以外の単純なデータ検証の責任を渡すものを追加できるようにし、別のクラスに複製しないようにする必要がありますか? どんな助けもありがたいです。ありがとう。
14 c#  .net  poco 

2
型自体の代わりに、型制約のあるジェネリックメソッドを使用するのはなぜですか?
別のStackExchangeの質問で、このプロトタイプを使用している人に気付きました。 void DoSomething<T>(T arg) where T: SomeSpecificReferenceType { //Code.... } 型の制約は1つだけであることに注意してください(SomeSpecificReferenceType)。単純にではなく、そのように記述することの違いと利点は何ですか? void DoSomething(SomeSpecificReferenceType arg) { //Code.... } どちらの場合も、argコンパイル時の型チェックの対象となります。どちらの場合も、メソッドの本体は、argコンパイル時に認識されている特定の型の(またはその子孫である)知識に安全に依存できます。 これは、熱心な開発者が通常の継承について学ぶ前にジェネリックについて学ぶ場合ですか?または、メソッドシグネチャがこのように記述される正当な理由がありますか?
14 c#  .net  generics 

2
C#の暗黙的な型変換演算子はいつ使用する必要がありますか?
C#では、暗黙的な変換演算子を次のようにオーバーロードできます(MSDNの例): struct Digit { /* ... */ public static implicit operator byte(Digit d) // implicit digit to byte conversion operator { /* ... */ } } したがって、型(カスタム値型)を使用して、自分自身を別の(無関係な)型に魔法のように変換し、観客を戸惑わせたままにすることができます(舞台裏を覗き込んで暗黙の変換演算子を見るまで)。 私のコードを読む人を戸惑わせるのは好きではありません。多くの人はそうは思わない。 問題は、コードを理解しにくくすることのない暗黙の型変換演算子のユースケースは何ですか?
14 c#  operators 

4
明示的なインターフェイス実装を使用してC#のメンバーを非表示にすることはできますか?
C#でのインターフェイスおよび明示的なインターフェイスの実装の操作方法は理解していますが、頻繁に使用されない特定のメンバーを非表示にするのが悪いと考えられているのではないかと考えていました。例えば: public interface IMyInterface { int SomeValue { get; set; } int AnotherValue { get; set; } bool SomeFlag { get; set; } event EventHandler SomeValueChanged; event EventHandler AnotherValueChanged; event EventHandler SomeFlagChanged; } イベントは有用ですが、使用されることはほとんどないことを事前に知っています。したがって、IntelliSenseの乱雑さを避けるために、明示的な実装を介して実装クラスからそれらを隠すことは理にかなっていると思いました。

2
C#にJavaよりも多くの機能があるのはなぜですか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 これはJavaとC#の引数であることを意図していないことに注意してください。私は、C#の経験のないJavaプログラマーであり、好奇心だけを求めています。 私はC#でいくつかの読書をしましたが、Javaよりもはるかに多くの機能を持っているようです。いくつかの例: 型推論。 dynamic キーワード。 デリゲート。 オプションのパラメーター。 ラムダとLINQ (実際、これらが何であるかわかりません)。 プロパティ。 ただし、JavaにはC#にはない機能は何もありません。 私の質問は、なぜC#にはJavaよりもはるかに多くのネイティブ機能があるのですか?そして、なぜJavaは、プロパティや型推論など、これらの一部を長年にわたって追加しなかったのですか?Java言語の設計者は、より単純なアプローチを取っていますか?この理由は何ですか?
14 java  c#  languages 

5
実装の前にインターフェイスAPIを作成する必要がありますか?
私は最近、より「組織化された」プログラミングを掘り下げてきましたが、実装ではなくインターフェイスにプログラミングする必要があることを学んでいます。それを念頭に置いて、可能であれば実装を記述する前に、インターフェイスでプロジェクトを「スケッチ」する方が良いでしょうか? サードパーティのライブラリ(Lidgrenなど)を使用する場合は、これらをインターフェイスでラップし、IOCコンテナを介して解決する必要がありますか、それともインターフェイスに公開してもかまいませんか?

4
さまざまなソースタイプおよびさまざまな宛先タイプへのデータインポートのデザインパターン
次を処理できるインポートスクリプト(C#)を設計および構築する必要があります。 さまざまなソース(XML、XSLX、CSV)からデータを読み取る データを検証する データをさまざまなオブジェクトタイプ(顧客、住所)に書き込む データは多数のソースから取得されますが、ソースには常に1つのインポート形式(csv、xml、xslxのいずれか)があります。インポート形式はソースごとに異なる場合があります。将来、新しいインポート形式が追加される可能性があります。宛先オブジェクトの種類は常に同じです(顧客、アドレスなど)。 私はジェネリックを使用することを考えていて、ファクトリーパターンについて何かを読みましたが、私はこの分野でかなり大きな初心者なので、アドバイスは大歓迎です。 この問題を解決するための適切な設計パターンは何ですか?

1
リポジトリパターンを使用していますか?
-repositoryデータベースからデータを取得するために、接尾辞が付いた一連の個別のクラスを使用しています。各テーブルごとに独自のリポジトリ。 たとえば、customerrepository顧客を取得するためのあらゆる種類のメソッドを持つクラスと、vacancyrepository空席を取得するためのあらゆる種類のメソッドを持つクラスがあります。 このことを行う方法について2つの質問があります。 複数のテーブルにまたがるデータを取得するのはどうですか?たとえば、私はまだ空席を作成していないすべての顧客を表示する画面を持っています。のcustomerrepositoryメソッドを使用できますか、vacancyrespository両方のリポジトリが結果を返すdataserviceことができますか?両方のリポジトリから結果を取得して1つの結果に結合する階層の上位にクラスを付けますか? そのようなリポジトリはどのくらいのロジックを処理できますか? リポジトリに「where active == true」を実装してアクティブなレコードのみを取得してもよいと思いますか、またはその単純なロジックでさえ、階層の上位のクラスで処理する必要があります(名前を付けましょうdataservice)? 私が今遭遇した例はこれです: 1つ以上の質問を含む質問リストがあります。 質問には結果があり、別のテーブルに保持されます。 したがって、質問リストの合計結果を取得するには、questionlistテーブル、質問テーブル、およびテーブルのデータを結合する必要がありquestionstatusます。 現在、これらのテーブルには3つの異なるリポジトリがあります。 questionlistrepositoryリスト番号12の合計結果を尋ねると、他の2つのリポジトリからデータを取得する必要があり、そのため何らかのロジックが必要になります。 またはquestionlistdataservice、使用するリポジトリを知っているものはありますか? もう1つ:リポジトリは結果を生成できるIQueryableため、呼び出し元のサービスは結果を簡単に結合できますが、そうでない場合は、3つのテーブルすべてのコンテンツをすべて取得することは良い考えではないと思いますデータベース。

1
{}でオブジェクトパラメータを作成しますか?
私は本からコードをデコードしようとしています: List<Person> people = new List<Person>() { new Person {FirstName="Homer",LastName="Simpson",Age=47}, new Person {FirstName="Marge",LastName="Simpson",Age=45} }; Personは、作成した単純なクラスであり、名前、姓などのフィールドがあります。 私が理解していないのは、中括弧ではないパラメーターをPersonのコンストラクターに送信しないかということです。私はこのコードを複製しようとしましたが、飛べないようです。 入力いただきありがとうございます。
14 c# 

3
複合パターンを使用するか、ツリー構造を使用するか、3番目の実装を使用するかをどのように判断できますか?
「オブザーバー」タイプと「サブジェクト」タイプの2つのクライアントタイプがあります。それらは両方ともグループの階層に関連付けられています。 オブザーバーは、異なる階層全体で関連付けられているグループから(カレンダー)データを受信します。このデータは、データを収集しようとしているグループの「親」グループからのデータを組み合わせて計算されます(各グループは1つの親のみを持つことができます)。 サブジェクトは、関連付けられているグループにデータ(オブザーバーが受信するデータ)を作成できます。グループでデータが作成されると、グループのすべての「子供」もデータを持ち、データの特定の領域の独自のバージョンを作成できますが、作成された元のデータにリンクされます(私の特定の実装では、元のデータには期間と見出しが含まれますが、サブグループは、それぞれのグループに直接リンクされた受信者の残りのデータを指定します)。 ただし、サブジェクトがデータを作成するとき、影響を受けるすべてのオブザーバーがこれと競合するデータを持っているかどうかを確認する必要があります。つまり、理解できる限り、巨大な再帰関数を意味します。 したがって、これは、上下に移動できる階層を持たせる必要があるという事実に要約できると思いますし、いくつかの場所はそれらを全体として扱うことができます(基本的に再帰)。 また、私は単に機能するソリューションを目指しているわけではありません。比較的理解しやすく(少なくともアーキテクチャ的には)、将来的に追加機能を簡単に受信できる柔軟性を備えたソリューションを見つけたいと思っています。 この問題または同様の階層の問題を解決するための設計パターン、または実行すべき優れたプラクティスはありますか? 編集: 私が持っているデザインは次のとおりです。 「Phoenix」クラスは、適切な名前をまだ考えていなかったため、そのように命名されています。 しかし、これに加えて、グループを通じて特定のオブザーバーに関連付けられている場合でも、特定のオブザーバーに対して特定のアクティビティを非表示にする必要があります。 少しオフトピック: 個人的には、この問題をより小さな問題に切り詰めることができるはずだと感じていますが、それは私をどのように回避します。相互に関連付けられていない複数の再帰機能と、さまざまな方法で情報を取得する必要があるさまざまなクライアントタイプが関係しているためだと思います。本当に頭を包むことはできません。階層の問題をカプセル化する方法を改善する方向に誰かが私を導くことができれば、それを受け取ることも非常にうれしいです。

7
C#は、C ++よりも「自分にぶら下がるロープ」を提供しますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 Joel Spolskyは、C ++を「自分を吊るすのに十分なロープ」と見なしました。実際、彼はScott Meyersによる「Effective C ++」を要約していました。 それは基本的に、C ++は自分を吊るすのに十分なロープであり、さらに数マイルのロープ、そしてM&Mを装った自殺薬がいくつかあるという本です... 私は本のコピーを持っていませんが、本の多くはランタイムがあなたのためにそれらの問題を管理するので、C#で意味がないと思われるメモリ管理の落とし穴に関連する兆候があります。 私の質問は次のとおりです。 C#は、注意深いプログラミングによってのみC ++で回避される落とし穴を回避しますか?その場合、どの程度、どのように回避されますか? C#には、新しいC#プログラマーが知っておくべき、新しい異なる落とし穴がありますか?もしそうなら、なぜC#の設計によってそれらを回避できなかったのでしょうか?

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