jsakamoto / self-learning-materials-for-blazor-jp

C# で Single Page Web アプリを開発するフレームワーク「Blazor」の WebAssembly 版の自習教材です。
https://jsakamoto.github.io/self-learning-materials-for-blazor-jp/Blazor%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%87%AA%E7%BF%92%E6%9B%B8-v.8.0.0.pdf
The Unlicense
141 stars 8 forks source link

Device型の配列の初期化方法について #3

Closed sano-suguru closed 6 years ago

sano-suguru commented 6 years ago

Step7 デバイス一覧ページ - リスト化(繰り返し) 3.Devicesフィールドに適当なデータを割り当てます。

のソースについて

現在、配列の初期化にnew[] {...}で匿名型を割り当てていますが、 以下のように一般的(?)な配列の初期化方法を使うのはいかがでしょうか?

Device[] Devices = {
    new Device {Name ="Odin", MACAddress ="00:15:5D:52:CA:B6"},
    new Device {Name = "Thor", MACAddress = "00:0C:29:30:7D:5D"},
    new Device {Name = "Fenrir", MACAddress = "00:50:56:01:43:86"}
};
jsakamoto commented 6 years ago

ご提案ありがとうございます。

そうですね、この場合ですと、左辺の代入先はフィールドであり、型宣言が省略不可なので、ひるがえって、ご提案の初期化方法が使えますね。

近々、Blazor の v.0.6.0 が Release されそうなので、その対応の際に合せて本件対応しようと思います(ので、それが完了するまで、本 Issue は開けておきます)。

ご提案ありがとうございます。

追伸 new[] { .. } による初期化は、実は匿名型の割り当てではなく、これはこれで配列初期化の構文となります。 今回ご連絡頂いた箇所については、左辺の代入先に(フィールド)変数の型が明記されているので、ご提案いただいた「= {...}」でも、元の「= new[] {...}」でも、意味的には同じです。 ローカル変数などで変数宣言に「var」を用いる場合は、型推論の必要から、「= {...}」は不可となりますね。

// これは構文エラー
var devices = { new Device {...}, new Device {...}, ... };
// これなら OK
var devices = new[] { new Device {...}, new Device {...}, ... };
jsakamoto commented 6 years ago

Blazor v.0.6.0 にあわせて自習書の改訂を実施しました。

下記のとおり、配列初期化のコードを変更しました。

https://github.com/jsakamoto/self-learning-materials-for-blazor-jp/commit/a43574d6a35037bfc9cde776f11e356cffdb535b#diff-a423f754b6c7e5185ff1bd8fb7bb8b33R16

以上で本 Issue は close します。 ご提案どうもありがとうございました。