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

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

2
JsonStringEnumConverter(System.Text.Json)はnull値をサポートしますか?
.NET Core 2.xから.NET Core 3.xにコードをシフトしています(つまり、ネイティブライブラリを使用していますSystem.Text.Json)。これを行う際に、以前のNewtonsoft.Jsonnull可能列挙型のサポートには現時点で明確な移行パスがないという問題が発生しました-.NET Core 3.xではサポートされていないようです。 たとえばNewtonsoft.Json、JSONコンバーターはを使用して、次のようにnull可能な列挙型をサポートしました。 public enum UserStatus { NotConfirmed, Active, Deleted } public class User { public string UserName { get; set; } [JsonConverter(typeof(StringEnumConverter))] // using Newtonsoft.Json public UserStatus? Status { get; set; } // Nullable Enum } ネイティブライブラリの現在のバージョンは、System.Text.Jsonこれをサポートしていないようです。 この問題を解決するにはどうすればよいですか?コードを移行できません!

3
関数を使用してオプションのパラメーターを定義する
関数のオプションのパラメーターとして特定の値の代わりに関数の戻り値を使用することは可能ですか?たとえば、代わりに: public void ExampleMethod(int a, int b, int c=10) { } 私のようなものが欲しい private int ChangeC(int a, int b) { return a+b; } public void ExampleMethod(int a, int b, int c=ChangeC(a,b)) { }

3
デフォルトのファイルからではなく、カスタムのapp.configファイルから<runtime>を読み取るようにアプリケーションに指示する方法
ConsoleApp2というアプリを作成しているとしましょう。 私が使用しているサードパーティのライブラリがあるため、私のデフォルトのapp.configファイルは次のようなコードを生成しています &lt;runtime&gt; &lt;assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"&gt; &lt;dependentAssembly&gt; &lt;assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /&gt; &lt;bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" /&gt; &lt;/dependentAssembly&gt; &lt;/assemblyBinding&gt; &lt;/runtime&gt; これは、私のソリューションが1つのライブラリの異なるバージョンを参照するため、「このライブラリのoldVersionを探す場合は、newVersionを使用する」ということを全員に伝える必要があるためです。そして、それは大丈夫です。 問題は、いくつかの設定があり、自動生成された設定を削除する別の設定ファイル「test.exe.config」を定義したいことです。 私のアプリに新しい設定ファイルについて知らせるために、私は次のようなコードを使用しています AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", "test.exe.config"); そして、それは(ほぼ)完全に動作します。セクションは正しく読み取られていますが、セクションは私のカスタム構成ファイルで見られていないので、私はそこに「ほぼ」書き込みましたが、代わりにアプリがデフォルトの構成ファイルでそれを探します。後で削除できます。&lt;appSettings&gt;&lt;runtime&gt; では、&lt;runtime&gt;カスタム構成ファイルの情報も読み取るようにアプリケーションに指示するにはどうすればよいですか? 問題の再現方法 私の問題を再現する簡単なサンプルは次のとおりです。 次のように、単一のクラスでClassLibrary2(.Net Framework v4.6)というライブラリを作成します。 using Newtonsoft.Json.Linq; using System; namespace ClassLibrary2 { public class Class1 { public Class1() { var json = new JObject(); json.Add("Succeed?", …
8 c#  .net  app-config 

1
なぜTask.Run()がUIスレッド/オリジンコンテキストに同期するのを待たないのですか?
非同期待ちのパターンとTask.Run動作は理解できたと思いました。 しかし、次のコード例でawait、完了したタスクから戻った後、なぜUIスレッドに同期しないのかと思います。 public async Task InitializeAsync() { Console.WriteLine($"Thread: {Thread.CurrentThread.ManagedThreadId}"); // "Thread: 1" double value = await Task.Run(() =&gt; { Console.WriteLine($"Thread: {Thread.CurrentThread.ManagedThreadId}"); // Thread: 6 // Do some CPU expensive stuff double x = 42; for (int i = 0; i &lt; 100000000; i++) { x += i - Math.PI; } …

1
Entity Framework Core 3.0のパフォーマンスへの影響(コレクションナビゲーションプロパティを含む)(デカルト爆発)
EF Core 2.2をEF Core 3.0にアップグレードした後、大きなパフォーマンスの問題に直面しています。単一のコレクションナビゲーションプロパティと数百のフィールドを持つ単純なデータモデルを想像してみてください(現実はさらに暗く見えます)。 public class Item { [Key] public int ItemID {get;set;} public ICollection&lt;AddInfo&gt; AddInfos {get;set;} ... // consisting of another 100+ properties! } そして public class AddInfo { [Key] public int AddInfoID {get;set;} public int? ItemID {get;set;} public string SomePayload {get;set;} } アイテムの取得中、次のようにクエリを実行します。 ... var myQueryable = …


3
linqを使用してメソッドをx回呼び出す
1つのメソッドを3回呼び出したいLINQを使用して、メソッドがオブジェクトを返し、そのオブジェクトをリストに追加したいのですが、どうすればよいですか? List&lt;News&gt; lstNews = new List&lt;News&gt;(); lstNews.Add(CollectNews) [x 3 times] &lt;-- Using Linq private static News CollectNews(){ ... }
8 c#  linq 

2
アプリケーションコードから「BuildServiceProvider」を呼び出すと、シングルトン警告のコピーが生成されます。どうすればこれを回避できますか?
別のプロジェクトの最後に4行を貼り付けたところ、うまくいきましたが、警告が表示されます。DIが十分に理解されていないことは明らかです。 public void ConfigureServices(IServiceCollection services) { if (HostingEnvironment.EnvironmentName == "Local") { services.AddHealthChecksUI() .AddHealthChecks() .AddCheck&lt;TestWebApiControllerHealthCheck&gt;("HomePageHealthCheck") .AddCheck&lt;DatabaseHealthCheck&gt;("DatabaseHealthCheck"); } services.Configure&lt;PwdrsSettings&gt;(Configuration.GetSection("MySettings")); services.AddDbContext&lt;PwdrsContext&gt;(o =&gt; o.UseSqlServer(Configuration.GetConnectionString("PwdrsConnectionRoot"))); services.AddMvc(o =&gt; { o.Filters.Add&lt;CustomExceptionFilter&gt;(); }); services.AddCors(options =&gt; { options.AddPolicy("CorsPolicy", b =&gt; b .SetIsOriginAllowed((host) =&gt; true) .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials()); }); services.AddSwaggerDocument(); services.AddHttpContextAccessor(); services.AddAutoMapper(typeof(ObjectMapperProfile)); services.AddTransient&lt;IEmailSender, EmailSender&gt;(); services.AddScoped(typeof(IAppLogger&lt;&gt;), typeof(LoggerAdapter&lt;&gt;)); services.AddScoped(typeof(IAsyncRepository&lt;&gt;), typeof(Repository&lt;&gt;)); services.AddScoped&lt;IRfReportTypeRepository, RfReportTypeRepository&gt;(); …

2
複数のユーザータイプのID-DbContextデザイン
.NET CoreのIdentityパッケージIdentityUser&lt;Guid&gt;を、単一のクラスで拡張された複数のクラスで使用しようとしていますUserRole。 UserStore&lt;T&gt;ユーザータイプごとに拡張する複数のクラスと、拡張する1つのクラスがありますRoleStore&lt;UserRole&gt;。 以下は私のstartup.csです: services.AddIdentity&lt;InternalUser, UserRole&gt;(IdentityOptions) .AddDefaultTokenProviders() .AddUserStore&lt;InternalUserStore&gt;() .AddRoleStore&lt;GenericUserRoleStore&gt;(); services.AddIdentityCore&lt;Contractor&gt;(IdentityOptions) .AddRoles&lt;UserRole&gt;() .AddDefaultTokenProviders() .AddUserStore&lt;ContractorUserStore&gt;() .AddRoleStore&lt;GenericUserRoleStore&gt;(); services.AddIdentityCore&lt;Homeowner&gt;(IdentityOptions) .AddRoles&lt;UserRole&gt;() .AddDefaultTokenProviders() .AddUserStore&lt;HomeownerUserStore&gt;() .AddRoleStore&lt;GenericUserRoleStore&gt;(); 私DbContextは延長していませんIdentityDbContext: public sealed class EntityDbContext: DbContext { } 複数のエラーが発生したため、以下を追加しましたDbContextが、コメント化しました。 public DbSet&lt;IdentityUserClaim&lt;Guid&gt;&gt; UserClaims { get; set; } public DbSet&lt;IdentityUserRole&lt;Guid&gt;&gt; UserRoles { get; set; } さまざまなエラーが発生します。 PluginType IUserStoreのインスタンス 'Dal.IdentityStores.InternalUserStore'およびPluginTypeのインスタンス 'RoleManager'でビルドエラーが発生しましたMicrosoft.AspNetCore.Identity.RoleManager 1[Models.Entities.Users.UserRole] - and …

2
forループで配列を反復処理することは、C#のスレッドセーフ操作ですか?IEnumerable <T>をforeachループで反復するのはどうですか?
私の理解に基づいて、C#の配列を指定して、複数のスレッドから同時に配列を反復処理の行為は、あるスレッド安全な操作。 することにより、配列を反復処理 Iは、によって、アレイ内のすべての位置を読んで意味昔ながらのforループ。各スレッドは単に配列内のメモリ位置のコンテンツを読み取っているだけで、誰も何も書き込んでいないため、すべてのスレッドが一貫した方法で同じものを読み取ります。 これは、上で書いたことを実行するコードの一部です。 public class UselessService { private static readonly string[] Names = new [] { "bob", "alice" }; public List&lt;int&gt; DoSomethingUseless() { var temp = new List&lt;int&gt;(); for (int i = 0; i &lt; Names.Length; i++) { temp.Add(Names[i].Length * 2); } return temp; } } したがって、私の理解では、メソッドDoSomethingUseless はスレッドセーフでありstring[]、をスレッドセーフタイプ(ImmutableArray&lt;string&gt;たとえば)に置き換える必要はありません。 私は正しいですか? …

1
Entity Framework Coreは、メモリオーバーフローなしで大きなblobデータをトラバースします。ベストプラクティス
大量の画像データをトラバースするコードを書いて、送信用に圧縮されたすべてを含む大きなデルタブロックを準備しています。 このデータの例を以下に示します [MessagePackObject] public class Blob : VersionEntity { [Key(2)] public Guid Id { get; set; } [Key(3)] public DateTime CreatedAt { get; set; } [Key(4)] public string Mediatype { get; set; } [Key(5)] public string Filename { get; set; } [Key(6)] public string Comment { get; set; } [Key(7)] …

2
ASP.NET Coreでランタイム認証を設定するにはどうすればよいですか?
私はロールベースのモジュール管理があり、いつでもいつでも変更されるという点でアプリケーションを作成しています。シナリオ: ユーザーが従業員を作成および表示するアクセス権を持っている場合、ユーザーは従業員を作成および表示することしかできませんが、将来の管理者はユーザーの役割を作成および表示から表示および削除に変更し、ユーザーはそのアクティビティのみを実行できます。 私は試し[Authorize(Roles ="Staff")]ますが、管理者がランタイムを変更した場合、それが管理されていません。 誰かがこれを調べて私に連絡してもらえますか?

2
CompareExchangeに基づくインターロックされた実装はSpinWaitを使用する必要がありますか?
以下は、に基づくインターロックされたメソッドの実装ですInterlocked.CompareExchange。 このコードでSpinWait繰り返しを行う前にスピンを使用することをお勧めしますか? public static bool AddIfLessThan(ref int location, int value, int comparison) { int currentValue; do { currentValue = location; // Read the current value if (currentValue &gt;= comparison) return false; // If "less than comparison" is NOT satisfied, return false } // Set to currentValue+value, iff still on currentValue; …

4
C#でWindowsサービスを介してPDF印刷
このコードを使用して、Windowsサービス内でC#を使用してローカルプリンターでPDFファイルを印刷しています。 Process process = new Process(); PrinterSettings printerSettings = new PrinterSettings(); if (!string.IsNullOrWhiteSpace(basePrint)) printerSettings.PrinterName = basePrint; process.StartInfo.FileName = fileName; process.StartInfo.Verb = "printto"; process.StartInfo.Arguments = "\"" + printerSettings.PrinterName + "\""; process.Start(); process.WaitForInputIdle(); ユーザーがWindowsサービスを実行するように設定すると、すべてが正常に機能します。 LocalSystem資格情報の下でこのコードを実行すると、「この操作に関連付けられているアプリケーションはありません」というエラーが表示されますが、これは通常、拡張子が.pdfのファイルの印刷操作を処理するプログラムがないことを示しています。 。 私の問題は、このコードがサービスに設定された特定のユーザーで機能し、ファイルを右クリックすることでプリンターにファイルを送信できるという事実によって確認されるように、この操作を処理するプログラム(Foxit Reader)があることです印刷オプションを選択します。 特定のユーザーなしでサービス内からローカルプリンターで印刷できるように変更できるものはありますか?

2
awaitを使用することと、非同期タスクを処理するときにContinueWithを使用することとの違いは何ですか?
これが私の意味です: public Task&lt;SomeObject&gt; GetSomeObjectByTokenAsync(int id) { string token = repository.GetTokenById(id); if (string.IsNullOrEmpty(token)) { return Task.FromResult(new SomeObject() { IsAuthorized = false }); } else { return repository.GetSomeObjectByTokenAsync(token).ContinueWith(t =&gt; { t.Result.IsAuthorized = true; return t.Result; }); } } 上記の方法は待つことができますが、T askベースのA同期P atternが提案することとよく似ていると思いますか?(私が知っている他のパターンはAPMおよびEAPパターンです。) では、次のコードはどうでしょう。 public async Task&lt;SomeObject&gt; GetSomeObjectByToken(int id) { string token = repository.GetTokenById(id); …

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