ふらっと C#,C♯,C#(初心者用) Part150

■ このスレッドは過去ログ倉庫に格納されています
2021/03/23(火) 12:58:24.10ID:ACoFzk2L0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part149
http://mevius.5ch.net/test/read.cgi/tech/1608085775/
■関連スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2021/04/27(火) 18:32:34.55ID:/yDoZvzG0
下手の考え休むに似たりって本当だよな
434デフォルトの名無しさん (ワッチョイ b701-J6CO)
垢版 |
2021/04/27(火) 18:33:38.95ID:+C/fTs2P0
>>432
多様性を使う為に必須というのは初耳だった
別に普通のクラスでも継承してインスタンス化すれば多様性は使えると思ってたんだけど

同じ親クラスやvarの配列にしてfor回したり
そこでインターフェースや抽象クラスにしてしまうよりかは
少なくとも何も処理しないダミー関数でも書いて仮想メソッドで実装しておいた方が良いとおもてる
2021/04/27(火) 18:35:08.09ID:MoRpu0yA0
>>431
いやいやinterfaceから触るでしょうよw
2021/04/27(火) 18:37:58.55ID:MoRpu0yA0
ちゃんとcase文書いた方がいくつ分岐してるかわかっていいじゃん
これをメリットと思えないのってなんでなの?
ソース読むときいくつに処理が別れてるか知らずに済むことって皆無だと思うけど
2021/04/27(火) 18:48:41.39ID:K2ItIfw9D
今って多態性じゃなく多様性って言うのが主流なの?
2021/04/27(火) 18:49:53.91ID:tjxIRyEc0
>>436
いくつに分岐しているかを気にしなくてすむのがinterfaceによる抽象化のメリットの1つだろうに
439デフォルトの名無しさん (ワッチョイ fc63-On6t)
垢版 |
2021/04/27(火) 18:51:27.27ID:LNs0Wm240
いいえ多態性です
440デフォルトの名無しさん (ワッチョイ 74e5-4uvq)
垢版 |
2021/04/27(火) 18:53:45.11ID:QWBqF+Zq0
>>431
interfaceって実装しなくてもいいの?
詐欺にならない?
2021/04/27(火) 18:59:04.44ID:izPR1pTAa
OOPの歴史も30年以上あるのでさすがに本質的に不要なものが
淘汰されずに生き残っているってことはないよ。

インターフェイス不要論とか抽象クラス不要論とか
staticおじさん級に幼稚で非生産的な書生論w

もっとマシなことに時間使った方がいいよ
2021/04/27(火) 19:07:16.33ID:pi+NfSuo0
>>440
実装しなくても良いのではなく、interfaceそのものには実装は書けない。必要なメソッドを定義するだけ
良くある例としてIDisposableがあるけど
using(var obj = new TestClass()) {
}
みたいな使い方したければ上記のTestClassにDispose()メソッドを用意してねって事で
class TestClass : IDisposable
{
public void Dispose() {何らかの終了処理}
}
みたいに実装を用意しないとそもそもエラーになる
2021/04/27(火) 19:27:42.16ID:H51IIUOO0
>>434
普通の継承でも使えたね。すまん
具象クラス継承の適切なケースがわからんので考えなくなって、出来るって事も忘れてた
2021/04/27(火) 19:49:20.62ID:MoRpu0yA0
>>441
ハイ、じゃあメリットは?
2021/04/27(火) 19:53:09.03ID:zk58yDApM
>>440
単一継承しか許されないクラスと違い多重継承が許されるインタフェースでは、実体を実装するとC++同様に基底メンバの衝突の問題が発生する
この問題を回避するために実装を派生先に委ねてしまうことにしてインタフェース内では実装は禁止されている
2021/04/27(火) 20:06:45.34ID:3YkNPMA00
教えて下さい。VBから書き換えて勉強してます。
フォーム1と2があり、それぞれTextBoxが無数にあります。フォーム1→2まで入力をして最後入力した情報を保存したいのですが、どういった形式、方法で保存するのが望ましいですか?
VBは区切り文字を入れ、datファイル1つに2行で書き込んでます。再度呼び出す際にsplitでそれぞれのTextBoxに入れてます。
が、何かのタイミングでTextBoxが増減したとか面倒そうなんですが一般的にはどんな感じでしてるんですかね?
2021/04/27(火) 20:21:32.78ID:cvesXM3a0
辞書を作りたまえ

DDXって死語け?
2021/04/27(火) 21:09:28.77ID:3TA75SVH0
json
2021/04/27(火) 21:15:25.28ID:YZq/AI+30
自分で使ったことはないけどinterfaceはデフォルト実装持てるようになってなかったっけ?
2021/04/27(火) 21:17:18.55ID:AfIT+tVg0
>>449
なってるけどあんま使いたくないな
2021/04/28(水) 01:26:19.18ID:C+xRRq0o0
まあどうしてもバイナリ互換性を崩したくない時に使うもんだよね
2021/04/28(水) 02:42:21.15ID:2iApvDDg0
バイナリ互換性って何?
2021/04/28(水) 03:00:12.55ID:C+xRRq0o0
あるdll(A)にインターフェイスが定義されており、別のdll(B)にその実装があった場合、Aを修正してもBに影響がなければバイナリ互換性があると言う。
たとえばAのインターフェイスに実装を持たないメンバーを追加するとBはコンパイルエラーになってしまうので互換性が崩れる。
Aにメンバーを足す際にデフォルトの実装を書いてあげれば、Bはコンパイルエラーにならない。

破壊的変更にならないようにフレームワークやライブラリを改修したいってのがインターフェイスのデフォルト実装の動機。
2021/04/28(水) 03:09:37.20ID:QdyWhJOJ0
まあCOMみたいにナントカ2とかナントカ3とか増えるのもまたアレ感があるんで
455デフォルトの名無しさん (ワッチョイ 3702-6Fjd)
垢版 |
2021/04/28(水) 06:00:02.52ID:Nr1kHF1d0
"IsDisabled": false,
"Name": "Tap",
"Arguments": [
"Keys.O",
"112",
"12600",
"True"


これって、キーボードのOを112ms間押して、12600ms離すって意味だよね?
約24時間、キーボードのPを押す時間も離す時間もランダム(10〜10000msの範囲で)にしたい場合どう入力したらいいの?
あと24時間以内にとある画像を認識した場合、認識したその都度W、S、A、Fを押すという時どう入力したらいいの?
2021/04/28(水) 11:10:31.63ID:905Z8E/r0
それ何の言語なの?
2021/04/28(水) 11:34:29.86ID:o3+T5GoG0
json
458デフォルトの名無しさん (ワッチョイ b701-J6CO)
垢版 |
2021/04/28(水) 12:01:20.73ID:k6d6iGQO0
アップキャストを行うと何が嬉しいのでしょう?
インスタンス化は普通
クラスA a = new クラスA();
なのに
クラスB b = new クラスA();
ってする意味です。入れれるのと使えるメソッドはイメージ通りですが、使うタイミングが不明です。
2021/04/28(水) 12:12:07.08ID:CT/VgEdf0
>>458
親クラスがクラスBで、クラスBを継承したのがクラスAってことなんだろうけど、
クラスBを継承したクラスCを追加して時に、クラスAとクラスCを同じように扱いたい時に使う。
2021/04/28(水) 15:39:41.26ID:z2mXZLfz0
>>458
foreachでまとめて処理するのに使ったかな。
2021/04/28(水) 16:32:07.21ID:snAX0stPa
>>458
あえて言えばサブクラスで隠蔽(new)を使ってるメソッドやプロパティがあると、
サブクラスのインスタンスをスーパークラスの変数に入れた場合に
動作が変わってくるんだけど、恐らくそういう目的でそれをやるケースは
ほとんどないんじゃないかな。

ほとんどの場合、それは積極的な意味を持たないと思う。
2021/04/28(水) 16:58:01.56ID:MNdo4yxk0
>>458
List<Human> list;
に派生したクラスとかを入れたい時に使う
463デフォルトの名無しさん (アウアウウー Sa83-Im0W)
垢版 |
2021/04/28(水) 17:52:40.77ID:snAX0stPa
>>462
大阪人「は」人間なので、そんなことは不要。

class Human { }
class Osakan : Human { }
....

var o = new Osakan();
var hs = new List<Human>();
hs.Add(o);
2021/04/28(水) 17:59:49.82ID:1SQ+syPV0
アップキャストってそれ自体を目的にするものなのかな?
意識せずに使ってるだけで、見方を変えればアップキャストが目的とも言えるのかもだが
2021/04/28(水) 19:54:14.62ID:MNdo4yxk0
>>463
それ暗黙的にアップキャストをしてるから不要ではないよね?
質問が、アップキャストの嬉しさについてだから例としては適切だと思うけど

アップキャストとしての嬉しさではなく、
クラスB b = new クラスA();という変数を作る意味があるのかって話なら、大抵は暗黙的なキャストてどうにかなるからやる意味はない
2021/04/28(水) 20:13:50.67ID:VZRYywec0
var s = new LinkedList<char>();
_ = Console.ReadLine().Select(x => s.AddLast(x));

これでsに標準入力が入る気がするのですが実際何も入りません
どうすればいいんでしょうか?
2021/04/28(水) 20:44:33.40ID:snAX0stPa
ポカミスだと思うけど、Selectはシーケンスを返すだけだよね。
Selectが実行された時点ではstringの中のcharを列挙したりしない。
2021/04/28(水) 20:50:43.89ID:VZRYywec0
>>467
var s = new LinkedList<char>();
_ = Console.ReadLine().Select(x => s.AddLast(x)).Count();

こうですね...
遅延評価にハマりました
ありがとうございました
2021/04/28(水) 21:04:25.17ID:VZRYywec0
var s = new LinkedList<char>(Console.ReadLine());
というかこれで良かったみたい
2021/04/28(水) 21:35:36.25ID:CT/VgEdf0
Select(x => s.AddLast(x))
はやっちゃ駄目だろう
471デフォルトの名無しさん (ワッチョイ 38e6-4uvq)
垢版 |
2021/04/28(水) 21:38:57.70ID:ohiKXwgS0
ToLinkedListを実装するのが絶対的正義
2021/04/28(水) 21:54:47.35ID:2iApvDDg0
>>457
このスレってJSONを推してる人むっちゃ多いんだけど、CSVと比べて何がいいの?
CSVに出来なくてJSONに出来ることってあるの?
2021/04/28(水) 22:01:00.21ID:N4TU29msM
階層構造を持たせられる
項目の追加が楽
シリアライザが充実している
方言の多いCSVと違い、仕様が統一されている
2021/04/28(水) 22:13:27.34ID:RJLrCSIQM
CSVの方がよさそうならCSVって回答するけど
このスレくらいの質問者だと背景や用途を喋らないので最大公約数的回答になる
2021/04/28(水) 22:18:25.06ID:SKK3EpB30
俺はjsonの方が好きだからjsonを使う
2021/04/28(水) 22:33:03.67ID:roTNJzpQa
CSVとかトラブル製造機じゃん
2021/04/28(水) 22:43:14.57ID:2iApvDDg0
>>473-476
ありがとうございます
なるほど、XMLでも階層構造は持たせられるけど仰々しいですよね
ああ、あれをシリアライザって呼ぶんですね
昔、一回JavaだかでJSON読んでみて満足した記憶があります
GW明けの使い捨てのスクリプトではJSONで書いて読んでみます
2021/04/29(木) 00:09:54.46ID:uAu0lWj/0
CSVは方言多すぎてそこらのパーサー使うの怖いわ
2021/04/29(木) 04:38:08.16ID:mJShgxJuM
unityでc#ぼちぼち覚えてきたけどc#って何ができるんや
2021/04/29(木) 05:53:27.68ID:Pwf8A7W+d
>>479
何でも出来るさ。ライブラリが揃えば。
2021/04/29(木) 05:59:02.89ID:RErNGDPY0
[ {"a" : "1"}, {"b" : "x"} ]

a列のみとか、b列のみしかないJSON が、CSV では、

a,b
1,
,x
2021/04/29(木) 09:03:47.11ID:lalb0v+EM
>>481
わからん
2021/04/29(木) 09:48:46.58ID:IBkpf/CX0
>>477
階層を持つのは後の欠点にもなるからね
結局はCSV形式で持ってた方がいずれ近いうちなるデータベース対応時に楽だよ
2021/04/29(木) 09:55:18.98ID:gug0J2oaa
楽じゃない
2021/04/29(木) 10:10:10.40ID:IBkpf/CX0
>>484
なんでだよ
階層データじゃデータベース入んねぇだろ
2021/04/29(木) 10:27:55.67ID:EFYWvXghd
楽じゃないな。
きちんとした形してるなら階層持ってるデータのほうがマシ。
正規化するよね?常識的に考えて。
2021/04/29(木) 10:28:53.11ID:qu9Hv39D0
jsonはそのままクラスに持たせられるから便利
あとパースできない読めないってことが少ない
xmlもcsvと比較するとjsonに近い

csvはそのまま行と列のデータだからDBにいれるだけなら悪くないしそれならサイズ的に軽い
改行ダブルクォーテーションとかあと上で言う方言とかあるから、なかなかトラブルを消しきれないこともある

Excelでもよみたいとか要件があるならcsvかな
2021/04/29(木) 10:37:53.58ID:EFYWvXghd
>>487
エクセルで読ませたら先頭のゼロ消すやつとか日付のフォーマット変えるやつとか、ハイフンがついた数字を日付にするやつが現れがちなのですごく嫌かな。
2021/04/29(木) 10:49:23.57ID:PVZP3gNe0
目的の違うデータ形式を個々人で違う基準で評価してあーだこーだ言っても仕方ないのと違うか。

ただ。
json 形式の意味があるのか分からない深い階層を持つデータに対応するクラス作ってたときは本気でイヤになったけど。w
きちんと正規化して意味のない階層だとかを排除してくれるなら扱いやすい方式だとは思う。 < json
2021/04/29(木) 11:15:55.38ID:Ta5ufSky0
csvのrow/columnをjsonで表現できるが逆はできないからcsv⊂jsonだけど
大量のデータを扱うにはjsonは冗長だよな。
2021/04/29(木) 11:30:58.28ID:b5j8CNbM0
jsonで大量データだと、容量削減のために要素名を変数1文字とかやりだすしな
2021/04/29(木) 11:40:51.69ID:gug0J2oaa
CSVよりJSON Linesですわな
2021/04/29(木) 12:43:50.51ID:Gvkp+FCpM
>>491
そんなことするくらいなら圧縮するわ
冗長だから圧縮した状態同士での比較ならCSVと変わらん
2021/04/29(木) 12:52:51.92ID:IBkpf/CX0
>>493
デカイ階層データで気になるのは処理速度だから圧縮されると余計時間かかる
2021/04/29(木) 13:06:57.09ID:C0wDcO7Sa
シリアル化方法(CSVをシリアル化とは普通は呼ばない気がするけど便宜上)を選択する上での
評価基準としては、

(1) 可搬性
(2) 対応するデータ構造の自由度
(3) 変換速度
(4) バージョン耐性
(5) テキストとしての可読性(これが重要なケースはほとんどないと思うが...)

こんなとこかね。
CSVで評価できるのは(1)ぐらいなので積極的に使う理由はないね当たり前だけど
2021/04/29(木) 13:39:52.49ID:gug0J2oaa
エクセルおじさん用のデータ交換フォーマットと割り切ったほうがいい
2021/04/29(木) 13:47:05.06ID:MqlSo6MR0
>>494
展開時間かかる代わりにアクセス時間が相当減るから、変わらんか早くなるよ。
2021/04/29(木) 14:36:43.78ID:t8Qsv63f0
用途次第だけどjsonのままDBにつっこめばいいじゃん()
2021/04/29(木) 14:44:24.17ID:hnM2dBp9M
>>497
そんなのCPUとI/O次第としか言えん
2021/04/29(木) 15:11:48.04ID:IBkpf/CX0
>>498
え?どうやって?
2021/04/29(木) 15:19:29.90ID:IBkpf/CX0
結局、データベースに入れる運命なのに今の時代に階層データにするやつなんか頭悪いんだよ
2021/04/29(木) 15:28:12.72ID:zh8QYWZnM
いまどきはどんなDBMSでもjson形式のデータインポートくらい出来るだろ
LINQでクエリ走らせるだけだろ
2021/04/29(木) 15:32:29.05ID:Ta5ufSky0
>>496
じゃあjsonはテキストエディタおじさん用か。
2021/04/29(木) 16:10:49.54ID:1OxYHKr7d
最近のRDBMSだとjson型とかあったりするからな。
>>499
ライトはともかくリードは2021年だと殆どの場合で早いぞ。
2021/04/29(木) 16:16:56.06ID:4wXFV0waM
>>504
いや、リードが速きゃ圧縮してなくても速いわけだが…
2021/04/29(木) 16:48:57.18ID:t8Qsv63f0
>>500
もう言われてたけどjson型サポートされてるRDBMSもある。触ったことないのでパフォーマンスは知らぬ
mysql,PostgreSQLはカラムの型としてサポート済で、oracleとsqlserverは文字列型で格納して制約や関数でjsonとして扱う感じなのかな?
PostgreSQLだとjsonのキーに対してもインデックス作れるんだね。便利そう
2021/04/29(木) 17:02:11.90ID:IBkpf/CX0
激レアケースを例にあげて自分の失策を正当化するのは良くないぞ
今の時代にデータベースに入れにくいデータ構造にしたのは明らかにバカ
それがわからないならお前らも結局時代に対応できないんじゃんwぷw
2021/04/29(木) 18:39:45.09ID:Yt1JhF/90
1ビット脳の生活って楽しそうだよね
2021/04/29(木) 18:44:26.59ID:pn1fVmji0
>>507
rdbに突っ込むの前提ならcsvでも正規化されたテーブルが対象なんだから入れやすさなんかだけでは語れない。csvのデータは概ね正規化されたデータの結合と見れるので。
正規化·データの関連性を考えればjson·xmlの方が有利まである。
結局用途次第だと思うよ
2021/04/29(木) 19:28:20.05ID:MqlSo6MR0
>>505
10MBのデータ読んでメモリに乗せるのと、100KBに収まったデータを展開してメモリに乗せるの、だいたい後者のほうが早いぞ。
2021/04/29(木) 19:30:06.10ID:IBkpf/CX0
>>509
は?じゃあjsonそのまま入れてみろよ
2021/04/29(木) 19:32:01.32ID:gug0J2oaa
CSVはインポートで有利とか言ってる人が居るけど
ほとんどの場合インポート用CSVに整形する手間があるからトータルで損してるんだよね
2021/04/29(木) 19:36:37.76ID:IBkpf/CX0
>>509
そうやって実際にはできないことできるってなんで言っちゃうかな?
2021/04/29(木) 19:37:51.57ID:bhMl+eBD0
いつまでスレ違い無意味なマウント合戦続ける気?
2021/04/29(木) 19:45:35.14ID:MqlSo6MR0
>>511
MSSQLならJSONそのままインポートできるだろ。
https://docs.microsoft.com/ja-jp/sql/relational-databases/json/import-json-documents-into-sql-server?view=sql-server-ver15#parse-json-documents-into-rows-and-columns
2021/04/29(木) 19:47:56.90ID:h5Kbt4/jM
>>512
それはあるな
一応データエンジニア名乗ってて仕事でいろんなCSVをロードしてきたけど、貰ってきたCSVをそのまま取り込めるのは稀だわ
2021/04/29(木) 19:48:06.90ID:4VO5KYJUa
交通整理マンが出てこない時は(以下略

>>510
どんな圧縮率w
2021/04/29(木) 19:49:52.48ID:IBkpf/CX0
>>515
そんな誰も使ってない上に階層構造のjsonに使えるかどうかもわからん上に
さらに絶対仕事で使えないもの持ってきて必死だなw
採用実績あるの?ソレw
2021/04/29(木) 19:50:03.03ID:MqlSo6MR0
>>517
カラム名が長いなって思うようなデータだと、それぐらいの圧縮率になるぞ。
おまえやってみても無いだろ。
2021/04/29(木) 19:50:38.18ID:MqlSo6MR0
>>518
2016以降できるし、普通に使う。
2021/04/29(木) 19:52:56.86ID:IBkpf/CX0
>>520
絶対嘘だろw
2021/04/29(木) 19:53:21.85ID:4VO5KYJUa
>>512>>516
英語が世界共通語として機能しているのは
英語が優れた言語だからではない。

可搬性と技術としての優位性は完全に別問題。
2021/04/29(木) 19:53:32.90ID:pn1fVmji0
まぁすれ違いなんで最後で
>>513
そのままなんか入れないよ。
csvも正規化されたテーブルに分解·展開して入れる
jsonも正規化されたテーブルに分解·展開して入れる
データ構造の形で関連性が分かるのでこの点ではjsonのほうが有利
これはわかるでしょ?
まぁxml·jsonは言われている通りにdbmsがサポートしている場合があるから、その場合はそのまま入れればいいけども
2021/04/29(木) 19:53:48.66ID:MqlSo6MR0
>>521
なんで嘘つかないとならんのだ。

知らなかった事は、勉強になった、で済ませた方がいいんじゃないか?
2021/04/29(木) 19:55:35.85ID:IBkpf/CX0
>>523
じゃあ、できないじゃん

>>524
やってないってさw
嘘つきくん
2021/04/29(木) 20:00:29.06ID:MqlSo6MR0
>>525
俺は、やってるよ。
jqで突っ込む事もあるけど。
jsonで持ってるとnullと空文字の区別がついたりそこそこ便利なんよ。
2021/04/29(木) 20:01:40.70ID:IBkpf/CX0
じゃあ、jsonぶん投げて入れてみろよ
どこのテーブルのどのフィールドにどうやって入るかもわからんけどw
階層になってるデータをなw

なんでできないこと言っちゃうかなw
2021/04/29(木) 20:05:16.52ID:t8Qsv63f0
時空が歪んで20年くらい前の環境からレスしてるんだろ
火曜日のインターフェース不要さんと同じ人っぽいし
2021/04/29(木) 20:05:41.39ID:MqlSo6MR0
>>527
対応を設定する方法はこれな。
https://docs.microsoft.com/ja-jp/sql/relational-databases/json/convert-json-data-to-rows-and-columns-with-openjson-sql-server?view=sql-server-ver15#option-2---openjson-output-with-an-explicit-structure
2021/04/29(木) 20:09:44.80ID:IBkpf/CX0
データベース使うとインターフェースも出番ないよね
そういうテーブルないし
2021/04/29(木) 20:11:38.28ID:Yt1JhF/90
急加速してて笑
2021/04/29(木) 20:12:58.48ID:MqlSo6MR0
データとしての互換性は全く無いが、同様にinserted,updated,deleted列を持っているデータ、なんかはインターフェイス作っても良いんじゃないの?
2021/04/29(木) 20:38:56.88ID:CPrTMOXFM
>>510
だいたいって言われてもねぇw
圧縮ソフトによるけど1/100に圧縮できるソフトだとそれなりにCPU負荷もかかるだろうしね
■ このスレッドは過去ログ倉庫に格納されています