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

C#言語のバージョン8.0での開発に関連する問題の場合。このバージョンでは、null許容の参照型、デフォルトのインターフェイスメソッド、非同期列挙型、その他の機能と拡張機能が追加されています。

1
C#8の配列スライス機能からの新しい帽子オペレーターのインデックスが0から開始しないのはなぜですか?
C#8.0では、配列をスライスする便利な方法が導入されています- 公式のC#8.0ブログポストを参照してください。 配列の最後の要素にアクセスする構文は次のとおりです int value[] = { 10, 11, 12, 13 }; int a = value[^1]; // 13 int b = value[^2]; // 12 要素に逆方向にアクセスするためのインデックス付けが、0ではなく1から始まるのはなぜですか。これには技術的な理由がありますか?
156 c#  arrays  indexing  c#-8.0 


3
「{}」とはどういう意味ですか?
次のコードがときどき表示され、実際に式が何をテストしているのかわかりません。 public static void Something(string[] value) { if (value is { }) { DoSomethingElse(); } }
36 c#  c#-8.0 

2
空のIAsyncEnumerableを作成する
私はこのように書かれたインターフェースを持っています: public interface IItemRetriever { public IAsyncEnumerable<string> GetItemsAsync(); } 次のように、アイテムを返さない空の実装を記述したいと思います。 public class EmptyItemRetriever : IItemRetriever { public IAsyncEnumerable<string> GetItemsAsync() { // What do I put here if nothing is to be done? } } それが単純なIEnumerableである場合、私は return Enumerable.Empty<string>();、私はそうしますが、何も見つかりませんでしたAsyncEnumerable.Empty<string>()。 回避策 私はこれがうまくいくのを見つけましたが、かなり奇妙です: public async IAsyncEnumerable<string> GetItemsAsync() { await Task.CompletedTask; yield break; } 何か案が?

1
親スコープの変数と同じ名前の子変数を宣言できるのはなぜですか?
同じ名前の変数がすでにある関数内で宣言されたアクションのパラメーターとして変数名を誤って再利用するコードを最近書きました。例えば: var x = 1; Action<int> myAction = (x) => { Console.WriteLine(x); }; 重複を見つけたとき、コードが完全にコンパイルされて実行されたことに驚きました。これは、C#のスコープについて知っていることに基づいて期待する動作ではありません。Laogda Scope Clarificationなど、いくつかの簡単なグーグル検索により、同様のコードがエラーを生成することを訴えるSOの質問が表示されました。(念のため、サンプルコードをIDEに貼り付けて、実行されるかどうかを確認しました。完全に実行されます。)さらに、Visual Studioで[名前の変更]ダイアログに入ると、最初の名前が​​名前の競合として強調表示されます。x このコードはなぜ機能するのですか?Visual Studio 2019でC#8を使用しています。

1
使用と使用待機の違いは何ですか?そして、どの方法を使用するかをどのように決定できますか?
場合によっては、Visual Studioでこれを行うことをお勧めします await using var disposable = new Disposable(); // Do something これの代わりに using var disposable = new Disposable(); // Do something 違いは何であるusingとはawait using? どれを使用するかをどのように決定すればよいですか?
21 c#  c#-8.0 

3
DTOにnull許容参照型を使用するためのベストプラクティス
DynamoDBテーブルから読み取ることで入力されるDTOがあります。現在、次のようになっているとします。 public class Item { public string Id { get; set; } // PK so technically cannot be null public string Name { get; set; } // validation to prevent nulls but this doesn't stop database hacks public string Description { get; set; } // can be null } これに対処するためのベストプラクティスはありますか?Dynamo …

1
IAsyncEnumerableをリストに変換
したがって、C#8ではIAsyncEnumerableインターフェイスが追加されました。 普通のものがあれば、それから欲しい他のコレクションをIEnumerable作ることができListます。そこでLinqに感謝します。 var range = Enumerable.Range(0, 100); var list = range.ToList(); さて、私は自分IAsyncEnumerableをaに、Listそしてもちろんこれを非同期に変換したいと思います。その場合のLinq実装はすでにありますか?ない場合、どうすれば自分で変換できますか?

1
C#8の不明なnull可能性とは何ですか?
C#8.0では、null許容の参照型を使用できます。ドキュメントでは、null可能性には4つのタイプがあると述べています。最初の3つは非常に明確ですが、「不明」のポイントを理解できません。ドキュメントはそれがジェネリックで使用されると言いますが、ジェネリックでT型の制約のない変数でメソッドを呼び出そうとすると、型がnull可能であるかのように警告するだけです。unknownとnullableの違いはわかりません。なぜ未知数が存在するのですか?それはどのように現れますか?

4
System.Text.Jsonを使用してリストを非同期に逆シリアル化する
多くのオブジェクトのリストを含む大きなjsonファイルを要求するとします。一度にメモリに保存したくはありませんが、1つずつ読み取って処理したいと思います。したがって、非同期System.IO.Streamストリームをに変換する必要がありIAsyncEnumerable<T>ます。新しいSystem.Text.JsonAPIを使用してこれを行うにはどうすればよいですか? private async IAsyncEnumerable<T> GetList<T>(Uri url, CancellationToken cancellationToken = default) { using (var httpResponse = await httpClient.GetAsync(url, cancellationToken)) { using (var stream = await httpResponse.Content.ReadAsStreamAsync()) { // Probably do something with JsonSerializer.DeserializeAsync here without serializing the entire thing in one go } } }

5
C#8のnullにできない参照型は、実行時にnullにできますか?
nullでない変数がnullを持たないという保証は本当にないようです。nullにできないプロパティが1つあるクラスがあるとします。 public class Foo { public Foo(string test) { Test = test; } public string Test {get;set;} } これはnullにできなくなったように見えるかもしれません。ただし、このクラスをnull許容コンテキストを使用しない別のライブラリで参照する場合、そこにnullを送信することを妨げるものはありません。 それは正しいですか、またはおそらくこれを確実にするいくつかの実行時チェックがありますか?

3
IAsyncEnumerableを返すメソッドの明確な命名規則はありますか?
C#5 が非同期プログラミングのasyncおよびawaitモデルを導入した後、C#コミュニティは、次のように、待機可能な型を返すメソッドに「非同期」サフィックスを追加する命名規則に到達しました。 interface Foo { Task BarAsync(); } 多くの静的コードアナライザー(Roslynベースと非Roslynベースの両方)は、非同期プログラミングに関するコードのにおいを検出するときに、この命名規則に依存するように作成されています。 C#8が非同期列挙型の概念を導入したので、それ自体は待機できませんが、と組み合わせて使用​​できます。await foreachメソッドに名前を付けるための2つのオプションが返されるようIAsyncEnumerableです。 interface Foo { // No "Async" suffix, indicating that the return value is not awaitable. IAsyncEnumerable<T> Bar<T>(); } または interface Foo { // With "Async" suffix, indicating that the overall logic is asynchronous. IAsyncEnumerable<T> BarAsync<T>(); } 上記のオプションに関して、C#5の命名規則が明確に標準化され、プログラマーの意見に基づく判断に委ねられていないなど、明確な命名規則のガイドライン(C#言語チーム、.NET Foundation、またはその他の機関による)はありましたか?
10 c#  c#-8.0 

1
FirstOrDefaultから公開されていないnull可能な参照型情報
C#8.0 の新しいnull許容参照型機能をテストしたかったのです。 .NET Core 3.0を対象とする新しいプロジェクトを開始し、.csprojファイルでnull許容の参照型を有効にして、コーディングを開始しました。私はaを取り、その配列に等しいstring[]を返す単純なリストを作成しました。ここで、配列に実際に存在するかどうかは定かでないので、を使用します。これは、一致が見つからない場合にデフォルトになるはずです。stringabcabcFirstOrDefault()null using System; using System.Linq; public string FindArgument(string[] args) { var arg = args.FirstOrDefault(x => x == "abc"); return arg; } 私のメソッドはを返しますstring。これはnullにできないタイプになっているはずです。nullFirstOrDefault()が返される可能性があるのでnull、上記のメソッドはnull の可能性があるarg変数を返すときに警告を生成することを期待します。ありません。 FirstOrDefault()Visual Studioでのシグネチャを見ると、その理由は明らかです。メソッドが返すのはstring、string?私が期待するnullに対応する同等のものではありません。 以下のメソッド本体を使用すると、期待した警告が表示されます。 var arg = args.Contains("abc") ? "abc" : null; return arg; (この例のSystem.Linq)システムライブラリは、.NET Core 3.0を対象とする場合、null可能性情報を実際に公開しませんか?

1
具体的な実装の代わりにデフォルトのメソッドを呼び出すにはどうすればよいですか
C#8で既定のインターフェイスメソッドの動作が変更されるのはなぜですか?過去のコードは次のとおりです(デフォルトのインターフェイスメソッドがデモでなかった場合)。 interface IDefaultInterfaceMethod { // By default, this method will be virtual, and the virtual keyword can be here used! virtual void DefaultMethod() { Console.WriteLine("I am a default method in the interface!"); } } interface IOverrideDefaultInterfaceMethod : IDefaultInterfaceMethod { void IDefaultInterfaceMethod.DefaultMethod() { Console.WriteLine("I am an overridden default method!"); } } …

2
null参照が可能ではないように思われるときに、なぜ参照解除null参照の警告が表示されるのですか?
HNQでこの質問を読んだ後、C#8のNullable参照型について読み、いくつかの実験を行いました。 誰かが「コンパイラのバグを見つけた!」と言ったとき、私は10回のうち9回、またはもっと頻繁にそれを知っています。これは実際には仕様によるものであり、彼ら自身の誤解です。そして、私がこの機能を調べ始めたのは今日だけなので、明らかに私はそれをあまりよく理解していません。これが邪魔にならないように、このコードを見てみましょう: #nullable enable class Program { static void Main() { var s = ""; var b = s == null; // If you comment this line out, the warning on the line below disappears var i = s.Length; // warning CS8602: Dereference of a possibly null reference } } …

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