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

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

7
null可能なすべてのC#ジェネリック型制約
だから私はこのクラスを持っています: public class Foo<T> where T : ??? { private T item; public bool IsNull() { return item == null; } } 今私は私がすることができる型パラメーターとしてすべてを使用できるようにする型制約を探していますnull。つまり、すべての参照タイプとすべてのNullable(T?)タイプを意味します。 Foo<String> ... = ... Foo<int?> ... = ... 可能なはずです。 使用するclassタイプの制約としては、私だけが参照型を使用することができます。 追加情報: パイプとフィルターのアプリケーションを作成nullしていて、パイプラインに渡される最後のアイテムとして参照を使用して、すべてのフィルターが適切にシャットダウンしたり、クリーンアップしたりできるようにしたい...
110 c#  generics  nullable 

4
TPM(Trusted Platform Module)を使用してバイトを暗号化する方法
マシンのTPMモジュールを使用してバイトを暗号化するにはどうすればよいですか? CryptProtectData Windowsは、APIを使用してblobを暗号化する(比較的)単純なAPIを提供しCryptProtectDataます。これを使いやすい関数をラップできます。 public Byte[] ProtectBytes(Byte[] plaintext) { //... } の詳細は、ProtectBytes非常に簡単に使用できるという考えほど重要ではありません。 ここに私が保持している秘密鍵で暗号化したいバイトがあります System 暗号化されたblobを返してください 返されるblobは、ドキュメント化されていないドキュメント構造であり、元のデータ(ハッシュアルゴリズム、暗号化アルゴリズム、salt、HMAC署名など)を復号化して返すために必要なものがすべて含まれています。 完全を期すために、ProtectBytesを使用しCrypt APIてバイトを保護する擬似コードのサンプル実装を以下に示します。 public Byte[] ProtectBytes(Byte[] plaintext) { //Setup our n-byte plaintext blob DATA_BLOB dataIn; dataIn.cbData = plaintext.Length; dataIn.pbData = Addr(plaintext[0]); DATA_BLOB dataOut; //dataOut = EncryptedFormOf(dataIn) BOOL bRes = CryptProtectData( dataIn, null, //data description (optional PWideChar) …


21
単体テストでのHttpClientのモック
単体テストで使用するコードをラップしようとすると、いくつか問題があります。問題はこれです。IHttpHandlerインターフェイスがあります。 public interface IHttpHandler { HttpClient client { get; } } そしてそれを使用するクラス、HttpHandler: public class HttpHandler : IHttpHandler { public HttpClient client { get { return new HttpClient(); } } } 次に、simpleIOCを使用してクライアント実装を注入するConnectionクラス: public class Connection { private IHttpHandler _httpClient; public Connection(IHttpHandler httpClient) { _httpClient = httpClient; } } そして、私はこのクラスを持つユニットテストプロジェクトを持っています: private IHttpHandler …
110 c#  unit-testing  moq 

19
SMTPサーバーは安全な接続を必要とするか、クライアントが認証されませんでした。サーバーの応答は次のとおりです:5.5.1認証が必要ですか?
アプリケーションからメールを送信したいのですが、メールを送信するための次のコードを書いています MailMessage msg = new MailMessage(); msg.From = new MailAddress("mymailid"); msg.To.Add("receipientid"); msg.Subject = "test"; msg.Body = "Test Content"; msg.Priority = MailPriority.High; SmtpClient client = new SmtpClient(); client.Credentials = new NetworkCredential("mymailid", "mypassword", "smtp.gmail.com"); client.Host = "smtp.gmail.com"; client.Port = 587; client.DeliveryMethod = SmtpDeliveryMethod.Network; client.EnableSsl = true; client.UseDefaultCredentials = true; client.Send(msg); 私はそれをlocalhostで実行しているので、それを送信するためにどのような間違いをしていますか。 ボタンを送信すると、次のようなエラーが発生します …
110 c#  smtp 

24
DataGridViewコントロールの列のサイズを自動的に変更し、ユーザーが同じグリッドの列のサイズを変更できるようにするにはどうすればよいですか?
Windowsフォーム(WPFではなくC#2.0)にDataGridViewコントロールを設定しています。 私の目標は、使用可能なすべての幅をセルできれいに埋めるグリッドを表示することです。つまり、右下の未使用(暗い灰色)領域はなく、含まれるデータに応じて各列のサイズを適切に設定しますが、ユーザーが任意の列のサイズを変更することもできます彼らの好みに。 各グリッドのAutoSizeModeをDataGridViewAutoSizeColumnMode.AllCellsに設定することでこれを実現しようとしています。ただし、グリッドの領域全体にデータがきちんと入力されるように、DataGridViewAutoSizeColumnMode.Fillに設定した列の1つを除きます。(ユーザーがこの列のサイズを変更しようとすると、水平方向のスペースが常に使用されるようにサイズが跳ね返ることは問題ありません。) ただし、前述したように、一度読み込まれると、ユーザーが各自の要件に合わせて列のサイズを変更できるようにしたいと思います。各列にこれらのAutoSizeMode値を設定すると、ユーザーはそれらの列のサイズを変更できなくなるようです。 サイズ変更を許可するすべての列のAutoSizeModeを設定しないようにしましたが、セルに含まれるデータに応じて初期サイズが設定されません。データのロード後にグリッドのAutoSizeModeを「Not Set」に戻すと、同じ結果が発生します。 デフォルトの列幅の自動設定とユーザーによるサイズ変更を可能にする設定がここにありませんか、それともDataGridViewコントロールにデータを入力するときに使用する必要がある別のテクニックがありますか?


21
パラメータなしでSQLインジェクションを回避する
ここで、コードでパラメーター化されたSQLクエリを使用することについて、別の議論が行われています。議論には2つの側面があります。私と、SQLインジェクションから常に保護するためにパラメーターを使用する必要があると言う他の人と、それが必要だと思わない他の人です。代わりに、SQLインジェクションを回避するために、すべての文字列で単一のアポストロフィを2つのアポストロフィに置き換えたいと考えています。私たちのデータベースはすべてSql Server 2005または2008を実行しており、コードベースは.NET Framework 2.0で実行されています。 C#で簡単な例を挙げましょう。 私はこれを使って欲しい: string sql = "SELECT * FROM Users WHERE Name=@name"; SqlCommand getUser = new SqlCommand(sql, connection); getUser.Parameters.AddWithValue("@name", userName); //... blabla - do something here, this is safe 他の人がこれをしたい間: string sql = "SELECT * FROM Users WHERE Name=" + SafeDBString(name); SqlCommand getUser = new SqlCommand(sql, …

11
Visual Studio Solutionファイルの解析
.NETでVisual Studioソリューション(SLN)ファイルを解析するにはどうすればよいですか?相対的なビルド順序を保存しながら、複数のソリューションを1つにマージするアプリを書きたいと思います。

8
設計時にvarを使用して宣言された変数の型を確実に判断するにはどうすればよいですか?
私はemacsでC#の補完(インテリセンス)機能に取り組んでいます。 ユーザーがフラグメントを入力し、特定のキーストロークの組み合わせを介して補完を要求すると、補完機能は.NETリフレクションを使用して可能な補完を決定するという考え方です。 これを行うには、完成するものの種類を知っている必要があります。文字列の場合、考えられるメソッドとプロパティの既知のセットがあります。それがInt32の場合は、別個のセットがあります。 emacsで利用可能なコードレクサー/パーサーパッケージのセマンティックを使用して、変数宣言とその型を見つけることができます。そのため、リフレクションを使用して型のメソッドとプロパティを取得し、オプションのリストをユーザーに提示するのは簡単です。(OK、emacs 内で実行するのは簡単ではありませんが、 emacs 内でpowershellプロセスを実行する機能を使用すると、はるかに簡単になります。リフレクションを実行するためのカスタム.NETアセンブリを記述し、それをpowershellにロードしてから、elisp内で実行しますemacsはコマンドをpowershellに送信し、comintを介して応答を読み取ることができます。その結果、emacsはリフレクションの結果をすばやく取得できます。) 問題varは、完了したものの宣言でコードが使用するときに発生します。つまり、タイプが明示的に指定されておらず、補完が機能しません。 変数がvarキーワードで宣言されている場合、実際に使用されているタイプを確実に判断するにはどうすればよいですか?明確にするために、実行時にそれを決定する必要はありません。「設計時」に決定したい。 これまでのところ、私はこれらのアイデアを持っています: コンパイルして呼び出す: 宣言ステートメントを抽出します。例: `var foo =" a string value ";` ステートメント `foo.GetType();`を連結します 結果のC#フラグメントを動的にコンパイルして新しいアセンブリに アセンブリを新しいAppDomainに読み込み、フレームを実行して戻り値の型を取得します。 アセンブリをアンロードして破棄する 私はこれをすべて行う方法を知っています。しかし、エディターでの完了要求ごとに、それはひどく重いように聞こえます。 私は毎回新しいAppDomainを必要としないと思います。単一のAppDomainを複数の一時的なアセンブリに再利用し、複数の完了リクエストにまたがって、それを設定および破棄するコストを償却できます。これは、基本的な考え方の微調整です。 ILのコンパイルと検査 宣言をモジュールにコンパイルし、ILを検査して、コンパイラーによって推論された実際のタイプを判別します。これはどのようにして可能でしょうか?ILの検査には何を使用しますか? そこにもっと良いアイデアはありますか?コメント?提案? 編集 -これについてさらに考えると、コンパイルと呼び出しは受け入れられません。呼び出しには副作用がある可能性があるためです。したがって、最初のオプションは除外する必要があります。 また、.NET 4.0の存在は想定できません。 更新 -正解は、上記には言及されていませんが、エリックリッパートによって穏やかに指摘されていますが、完全な忠実度の型推論システムを実装することです。これは、設計時に変数のタイプを確実に決定する唯一の方法です。しかし、それも簡単ではありません。私はそのようなものを構築したいという幻想に苦しんでいないので、オプション2のショートカットをとりました-関連する宣言コードを抽出してコンパイルし、結果のILを検査します。 これは、完了シナリオのかなりのサブセットに対して実際に機能します。 たとえば、次のコードフラグメントで、?ユーザーが完了を要求する位置です。これは機能します: var x = "hello there"; x.? 補完により、xは文字列であることがわかり、適切なオプションが提供されます。これは、次のソースコードを生成してコンパイルすることによって行われます。 namespace N1 { static class dmriiann5he …


3
XPathをXDocumentで使用する方法
同様の質問がありますが、私の場合、解決策がうまくいかなかったようです:XDocument、XPath、および名前空間の奇妙さ これが私が作業しているXMLです: <?xml version="1.0" encoding="utf-8"?> <Report Id="ID1" Type="Demo Report" Created="2011-01-01T01:01:01+11:00" Culture="en" xmlns="http://demo.com/2011/demo-schema"> <ReportInfo> <Name>Demo Report</Name> <CreatedBy>Unit Test</CreatedBy> </ReportInfo> </Report> そして以下は私がそれが機能するはずであると思ったがそれが機能しなかったコードです... XDocument xdoc = XDocument.Load(@"C:\SampleXML.xml"); XmlNamespaceManager xnm = new XmlNamespaceManager(new NameTable()); xnm.AddNamespace(String.Empty, "http://demo.com/2011/demo-schema"); Console.WriteLine(xdoc.XPathSelectElement("/Report/ReportInfo/Name", xnm) == null); 誰かアイデアはありますか?ありがとう。
109 c#  .net  xml  xpath  linq-to-xml 

3
ASP.Netフォームに送信された投稿データを読み取る
asp.netアプリケーションで動作するログインフォームがあります。ユーザー名とパスワードのテキストボックス、およびログインを処理するためのボタンを備えた標準的なもの。正常に動作します。 ユーザーが、asp.netアプリケーションの一部ではない別のプレーンHTMLページからユーザー名とパスワードを入力できるようにする新しい要件があります。フォーム、入力、送信ボタンなど、標準のhtmlを使用してこれを達成する予定です。フォームアクションはasp.netログインページのURLであり、そのメソッドはPOSTです。 おそらくPage_Loadイベントで、asp.netログインフォームのC#コードビハインドページで実行したいのは、ページのリクエストに、渡されたユーザー名とパスワードの値が含まれているかどうかを確認することです。これらの値を読み取って、誰かがasp.netページのログインボタンをクリックしたかのようにログインを処理します。そうでない場合は、通常どおりログインフォームを表示します。 ページのリクエストでユーザー名とパスワードの値の存在を確認し、読み取る方法を教えてください。
109 c#  asp.net  post 

2
同期操作の代わりに非同期WebAPI操作を作成する必要があるのはなぜですか?
作成したWeb APIに次の操作があります。 // GET api/<controller> [HttpGet] [Route("pharmacies/{pharmacyId}/page/{page}/{filter?}")] public CartTotalsDTO GetProductsWithHistory(Guid pharmacyId, int page, string filter = null ,[FromUri] bool refresh = false) { return delegateHelper.GetProductsWithHistory(CustomerContext.Current.GetContactById(pharmacyId), refresh); } このWebサービスの呼び出しは、次の方法でJquery Ajax呼び出しを介して行われます。 $.ajax({ url: "/api/products/pharmacies/<%# Farmacia.PrimaryKeyId.Value.ToString() %>/page/" + vm.currentPage() + "/" + filter, type: "GET", dataType: "json", success: function (result) { vm.items([]); var …


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