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

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

3
コードの非同期バージョンと同期バージョンの両方が必要な場合に、DRY原則に違反しないようにするにはどうすればよいですか?
同じロジック/メソッドの非同期バージョンと同期バージョンの両方をサポートする必要があるプロジェクトに取り組んでいます。だから例えば私は持っている必要があります: public class Foo { public bool IsIt() { using (var conn = new SqlConnection(DB.ConnString)) { return conn.Query<bool>("SELECT IsIt FROM SomeTable"); } } public async Task<bool> IsItAsync() { using (var conn = new SqlConnection(DB.ConnString)) { return await conn.QueryAsync<bool>("SELECT IsIt FROM SomeTable"); } } } これらのメソッドの非同期ロジックと同期ロジックは、1つは非同期でもう1つはそうでないことを除いて、すべての点で同じです。このようなシナリオでDRYの原則に違反しないようにする正当な方法はありますか?GetAwaiter()。GetResult()を非同期メソッドで使用して、それを同期メソッドから呼び出すことができると人々が言っ​​ているのを見ましたか?そのスレッドはすべてのシナリオで安全ですか?これを行う別のより良い方法はありますか、それともロジックを複製することを余儀なくされていますか?
15 c#  .net  asynchronous 

1
.NETリフレクションを使用してnull可能な参照型を確認する方法
C#8.0では、null許容の参照型が導入されています。次に、null許容プロパティを持つ単純なクラスを示します。 public class Foo { public String? Bar { get; set; } } クラスのプロパティがリフレクションを介してnull可能な参照型を使用しているかどうかを確認する方法はありますか?

2
MySqlConnectionを開くときに例外がスローされませんか?
私は非同期とタスクから始めたばかりで、コードが処理を停止しました。これは、着信ネットワークパケットがあり、パケットハンドラ内のデータベースと通信しようとしたときに発生します。 public class ClientConnectedPacket : IClientPacket { private readonly EntityFactory _entityFactory; public ClientConnectedPacket(EntityFactory entityFactory) { _entityFactory= entityFactory; } public async Task Handle(NetworkClient client, ClientPacketReader reader) { client.Entity = await _entityFactory.CreateInstanceAsync( reader.GetValueByKey("unique_device_id")); // this Console.WriteLine never gets reached Console.WriteLine($"Client [{reader.GetValueByKey("unique_device_id")}] has connected"); } } Handleメソッドは非同期タスクから呼び出されます if (_packetRepository.TryGetPacketByName(packetName, out var packet)) { …
14 c#  mysql 

3
Task.WhenAllの継続が同期的に実行されるのはなぜですか?
Task.WhenAll.NET Core 3.0で実行しているときに、私はメソッドについて奇妙な観察をしました。単純なTask.Delayタスクを単一の引数としてに渡しましたTask.WhenAllが、ラップされたタスクは元のタスクと同じように動作するはずです。しかし、そうではありません。元のタスクの継続は非同期で実行され(これは望ましい)、複数のTask.WhenAll(task)ラッパーの継続は1つずつ同期して実行されます(これは望ましくありません)。 ここでデモこの動作のは。4つのワーカータスクが同じTask.Delayタスクが完了するのを待ってから、重い計算(でシミュレートThread.Sleep)を続行します。 var task = Task.Delay(500); var workers = Enumerable.Range(1, 4).Select(async x => { Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}" + $" [{Thread.CurrentThread.ManagedThreadId}] Worker{x} before await"); await task; //await Task.WhenAll(task); Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff}" + $" [{Thread.CurrentThread.ManagedThreadId}] Worker{x} after await"); Thread.Sleep(1000); // Simulate some heavy CPU-bound computation }).ToArray(); Task.WaitAll(workers); これが出力です。4つの継続は、異なるスレッドで(並列に)期待どおりに実行されています。 05:23:25.511 [1] Worker1 before await 05:23:25.542 …

2
メソッドが事実上フィールドのnullチェックであることをC#のnull可能参照に通知できますか
次のコードを検討してください。 #nullable enable class Foo { public string? Name { get; set; } public bool HasName => Name != null; public void NameToUpperCase() { if (HasName) { Name = Name.ToUpper(); } } } Name = Name.ToUpper()で、Nameがnull参照の可能性があるという警告が表示されますが、これは明らかに正しくありません。HasNameをインライン化することでこの警告を解決できるため、条件は(Name!= null)になります。 HasNameからの真の応答がNameにnull可能でない制約を意味することをコンパイラーに指示する方法はありますか? HasNameは実際により多くのことをテストする可能性があり、いくつかの場所で使用したり、APIサーフェスのパブリック部分になる可能性があるため、これは重要です。nullチェックを独自のメソッドに組み込む理由はたくさんありますが、そうすることでnull可能な参照チェッカーが機能しなくなるようです。

2
Razorビューで新しいC#8.0機能を使用する方法
ASP.NET Mvc 5 Webアプリケーションを更新して、Visual Studio 2019を通じて新しいc#8.0機能を使用しました。Razorビュー内でこれらの新機能を使用するまで、すべてが正常に機能します。 たとえば、新しいスイッチ式を使用しようとすると、次のようになります。 @{ ViewBag.Title = "About"; var foo = 1; var bar = foo switch { 1 => "one", 2 => "two", _ => string.Empty }; } <h2>@ViewBag.Title.</h2> <h3>@ViewBag.Message</h3> <p>Use this area to provide additional information.</p> ページにアクセスしようとするまで、コンパイラーは文句を言わず、コンパイルエラーが発生します。 Microsoft.CodeDom.Providers.DotNetCompilerPlatform更新する必要があると思いますが、利用可能な更新がないようです。 RazorビューでC#8.0言語機能を使用する方法はありますか?
14 c#  asp.net-mvc  razor 

6
403メッセージ:Legacy People APIはプロジェクトで使用されていません
Google APIはアクティブですが、エラーが発生します。Legacy People APIは、以前にプロジェクトで使用されていないか、無効になっています。https://console.developers.google.com/apis/api/legacypeople.googleapis.com/overview?project=にアクセスして有効にしてから、再試行してください。このAPIを最近有効にした場合は、アクションがシステムに反映されるまで数分待ってから再試行してください。
14 c#  asp.net  google-api 

3
'アセンブリ' Microsoft.AspNetCore.Mvc.Formatters.Json、Version = 3.0.0.0から型 'Microsoft.AspNetCore.Mvc.MvcJsonOptions'を読み込めませんでした
Webアプリケーションでnetstandard2.1ライブラリを使用してnetcoreapp3.0います。にサービスを追加すると、Startup次のエラーが発生します。 'アセンブリ' Microsoft.AspNetCore.Mvc.Formatters.Json、Version = 3.0.0.0から型 'Microsoft.AspNetCore.Mvc.MvcJsonOptions'を読み込めませんでした またMicrosoft.AspNetCore.Mvc、クラスライブラリで2.2.0パッケージの機能をいくつか使用しています。 これが私のライブラリです.csproj、 <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.1</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" /> </ItemGroup> </Project> これが私のServiceExtensionsライブラリのクラスです。 public static class ServiceExtensions { public static IMvcBuilder AddMyLibrary(this IMvcBuilder builder) { builder.Services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>(); builder.AddJsonOptions(options => { options.SerializerSettings.ContractResolver = new DefaultContractResolver(); }); builder.Services.ConfigureOptions<ConfigureLibraryOptions>(); return builder; } } これが私のConfigureLibraryOptionsクラスです public …

1
ASP.NET MVC Core 3.0 API列挙型を文字列にシリアル化
ASP.NET MVC Core 3.0でEnumフィールドをIntではなくStringにシリアル化する方法は?古い方法ではできません。 services.AddMvc().AddJsonOptions(opts => { opts.JsonSerializerOptions.Converters.Add(new StringEnumConverter()); }) エラーが発生します: 「Newtonsoft.Json.Converters.StringEnumConverter」から「System.Text.Json.Serialization.JsonConverter」に変換できません

3
特定の条件で2つから1つのデータテーブルを作成する
まず、ODBCからすべてのデータを取得する必要があります(これは既に機能しています)。 次に、どのようにそれを行うことができるのかまだわからない、最も複雑な部分があります。ODBCには2つのデータテーブルがあります。それらを現在のコードとマージし、特定のパラメータでフィルタリングしています。 データベースの表1: NRO NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE 123 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1 133 Opel Meriva FTG J5 K4 O3 P4 O2 JO 3 1 153 MB E200 C25 JN KI OP PY OR JD 5 …
13 c#  datatable 

4
終了を待機しているときにプロセスがハングすることがある
終了を待つ間にプロセスがハングする理由は何ですか? このコードは、内部で多くのアクションを実行するpowershellスクリプトを開始する必要があります。たとえば、MSBuildを介してコードの再コンパイルを開始しますが、おそらく問題は、出力が多すぎて、Power Shellスクリプトが正しく実行された後でも終了を待機している間にスタックすることです。 このコードは正常に動作することもあれば、スタックすることもあるので、「奇妙」です。 コードは次の場所でハングします: process.WaitForExit(ProcessTimeOutMiliseconds); Powershellスクリプトは1-2秒程度で実行されますが、タイムアウトは19秒です。 public static (bool Success, string Logs) ExecuteScript(string path, int ProcessTimeOutMiliseconds, params string[] args) { StringBuilder output = new StringBuilder(); StringBuilder error = new StringBuilder(); using (var outputWaitHandle = new AutoResetEvent(false)) using (var errorWaitHandle = new AutoResetEvent(false)) { try { using (var process = …
13 c# 

2
Office365の共有メールボックスからSMTPメールを送信できますか?
O365への移行を検討しています。ただし、現在のExchangeサーバーを使用して、エラーが発生したときに外部ユーザーとサポートボックスの両方に電子メールを送信するソフトウェアを開発しました。 これをテストして、配置したコードがO365で引き続き機能することを確認しましたが、これまでのところ、あまり成功していません。 .NetのSmtpClientとMailKitのSmtpClientを使用してみましたが、どちらも機能しないようです。エラーが発生し続けます(これはMailKitからのエラーです。.Netエラーも同様です)。 「AuthenticationInvalidCredentials:5.7.3認証失敗[* .prod.exchangelabs.com]」 コードにある資格情報を使用してOWAにログインできます。資格情報が有効であることはわかっています。O356経由でメールを送ることはできませんか?これを可能にするためにExchangeで実行する必要がある特別な構成はありますか? これが私がこれまでに試したことです: MailKit var msg = new MimeMessage(); msg.From.Add(new MailboxAddress("Support","support@mydomain.com")); msg.To.Add(new MailboxAddress("Me","me@mydomain.com")); msg.To.Add(new MailboxAddress("External User","euser@externaldomain.com")); msg.Subject = "Test"; msg.Body = new TextPart("plain"){ Text = "Here is a message for you" }; using(var client = new SmtpClient()){ client.ServerCertificateValidationCallback = (s,c,h,e) => true; client.AuthenticationMechanisms.Remove("XOAUTH2"); //Not sure what …
13 c#  .net  smtp  office365  mailkit 

1
C#スイッチ式が異なる結果を返す
プロジェクトの1つでC#8に切り替えました。そして、私はすべてのswitch発言を表現に移しています。しかし、自分のプロジェクトが別の方法で機能し始めたこと、そしてそれがswitch表現のせいであることがわかりました。たとえば、このコードを取得しましょう class Program { public enum DataType { Single, Double, UInt16, UInt32, UInt64, Int16, Int32, Int64, Byte } static void Main(string[] args) { dynamic value1 = 5; dynamic value2 = 6; var casted = CastToType(value1, DataType.Int16); var casted1 = CastToTypeExpression(value2, DataType.Int16); var type = casted.GetType(); // Int16 var type1 = …
13 c# 

2
.NET Core 3.0 Entity Frameworkでグループ参加を実行するにはどうすればよいですか?
.NET Core 3.0の変更により、 ... NavigationExpandingExpressionVisitor 'が失敗しました。これは、EF Coreのバグまたは制限を示している可能性があります。詳細については、https://go.microsoft.com/fwlink/?linkid = 2101433を参照して ください。)---> System.InvalidOperationException:LINQ式 'GroupJoin、...の処理 これは非常に単純なクエリなので、.NET CORE 3.0で実行する方法が必要です。 var queryResults1 = await patients .GroupJoin( _context.Studies, p => p.Id, s => s.Patient.Id, (p, studies) => new { p.DateOfBirth, p.Id, p.Name, p.Sex, Studies =studies.Select(s1=>s1) } ) .AsNoTracking().ToListAsync(); 私は基本的に、Studyを患者に結合するLinqクエリ(または上記のメソッド構文)を探しており、Studyを空のリストに設定するか、特定の患者のスタディがない場合はnullを設定します。 何か案は?これは.NET Core 2.2で機能していました。また、上記のMSFTリンクは、重要な変更がクライアント側の評価に関連しており、生成されたクエリがテーブル全体を読み取ることを回避していることを示しています。ただし、この単純なクエリでは、結合はサーバー側で簡単に実行できるはずです。

3
Entity Framework Coreの強く型付けされたID
私は強く型付けされたIdクラスを作ろうとしていますが、これは内部で「long」を保持しています。以下の実装。私のエンティティでこれを使用している問題は、Entity Frameworkから、プロパティIDが既にマッピングされているというメッセージが表示されることです。IEntityTypeConfiguration以下を参照してください。 注:私は厳密なDDD実装を目指していません。したがって、コメントや回答の際には、このことを覚えておいてください。型付けの背後にあるID全体Idは、すべてのエンティティでIdを使用するように強く型付けされているプロジェクトにアクセスする開発者向けです。もちろんlong(またはBIGINT)に翻訳されますが、他の人にとっては明らかです。 動作しないクラスと構成の下。リポジトリはhttps://github.com/KodeFoxx/Kf.CleanArchitectureTemplate.NetCore31にあります。 Id(現在コメントアウトされている)のクラス:https : //github.com/KodeFoxx/Kf.CleanArchitectureTemplate.NetCore31/blob/master/Source/Common/Kf.CANetCore31/DomainDrivenDesign/Id.cs EntityおよびValueObjectクラス(EntityプロパティIdのタイプはId.cs(上)でした:https : //github.com/KodeFoxx/Kf.CleanArchitectureTemplate.NetCore31/tree/master/Source/Common/Kf.CANetCore31/DomainDrivenDesign 構成:https : //github.com/KodeFoxx/Kf.CleanArchitectureTemplate.NetCore31/tree/master/Source/Infrastructure/Persistence/Kf.CANetCore31.Infrastructure.Persistence.Ef/EntityTypeConfigurations Idクラスの実装(これは解決策が見つかるまでアイデアを放棄したため、現在は使用されていません) namespace Kf.CANetCore31.DomainDrivenDesign { [DebuggerDisplay("{DebuggerDisplayString,nq}")] [Obsolete] public sealed class Id : ValueObject { public static implicit operator Id(long value) => new Id(value); public static implicit operator long(Id value) => value.Value; public static implicit operator Id(ulong value) => …

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