- 1 名前:デフォルトの名無しさん mailto:sage [2017/10/17(火) 04:02:10.51 ID:/jJUZ/t7.net]
- ■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
www.visualstudio.com/downloads/ ■コードを貼る場合はこちら ideone.com/ ■前スレ C#, C♯, C#相談室 Part94 mevius.2ch.net/test/read.cgi/tech/1492843013/ ■次スレは>>970が建てる事 建てられない場合は他を指定する事。
- 98 名前:デフォルトの名無しさん mailto:sage [2017/11/10(金) 17:18:52.60 ID:EEZieTzn.net]
- >>95
誰だよそれ?
- 99 名前:デフォルトの名無しさん mailto:sage [2017/11/10(金) 17:22:41.93 ID:VxFWEUmd.net]
- >>97
自分でいじってないなら初期設定決めたMSの人では
- 100 名前:デフォルトの名無しさん mailto:sage [2017/11/10(金) 18:12:13.90 ID:MvAM88wE.net]
- コンパイルエラーとは別にコード分析のエラー欄に出るんじゃないか?
>>91 命名ルールはこれ https://msdn.microsoft.com/ja-jp/library/ms229002.aspx
- 101 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 00:13:18.80 ID:VQqkIwVV.net]
- class A{
class B{ class C{ } } } みたいに三重くらいになると、自分でもわけ分からなくなって来るんですが、 世間では三重くらいは普通ですか?
- 102 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 00:28:57.43 ID:FsCJcvbF.net]
- >>100
内部クラスって表記しやすいだけでそれ以外のメリットあるのかね?
- 103 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 00:33:23.96 ID:BH43IN+9.net]
- javaの人は良く使うけど
スコープの問題だけだから本来は使わないでもよさそう
- 104 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 00:59:17.39 ID:kkrHimLP.net]
- 内部クラスはたまーーーに使うけど3重なんて一度もしたことないな
- 105 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 01:19:20.69 ID:3ysLENMg.net]
- 何重までいけるん?
- 106 名前:デフォルトの名無しさん mailto:sage [2017/11/11(土) 11:11:58.59 ID:f6zZSvYO.net]
- >>104
プログラムやる人の発想じゃないな
- 107 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 08:56:15.86 ID:LXGneVsA.net]
- >>100
static classだとよくやるけど static class My{ static class Hoge{ static class Config{ } } } My.Hoge.Configのように使える でも3重は使わないな
- 108 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 10:27:34.46 ID:j0JK3XOe.net]
- Javaだと1クラス1ファイル
客先の規約で配置できるファイルに制限があると内部クラスを使わざるをえない
- 109 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 10:36:20.99 ID:3BzbD7Br.net]
- enum使いにくいから代わりにstatic class乱用してるわ
- 110 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 10:46:19.17 ID:kmdFzMTF.net]
- >>108
enumのどのあたりがダメなん?
- 111 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 11:11:16.62 ID:3BzbD7Br.net]
- >>109
後で要素増えたら参照先全部ビルドし直さなきゃならんあたり
- 112 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 11:19:21.94 ID:kmdFzMTF.net]
- >>110
ビルドなんて一瞬じゃん?
- 113 名前:デフォルトの名無しさん [2017/11/12(日) 11:28:22.38 ID:PNAmYcb6.net]
- .Net Core 2.0では、だいぶん.NetFrameworkの実装がカバーされたと聞きました。
https://raw.githubusercontent.com/dotnet/standard/master/docs/versions/netstandard2.0_ref.md これを見る限りでは、System.IO.StreamやSystem.IO.FileInfo、ISerializableなど もあります。これらをUWPやASP.NET Coreでも使えるようになるという理解でいいでしょうか。
- 114 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 11:44:42.71 ID:j0JK3XOe.net]
- C#のenumはメソッド定義できないから役立たず
- 115 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 12:19:41.85 ID:pNqEHb8d.net]
- >>113
javaとは思想が違うからな どうしてもメソッド使いたけりゃ拡張メソッド書けばいいだけのこと
- 116 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 12:24:54.60 ID:zaPGzGOT.net]
- enumは型安全性をぶち壊すから…
- 117 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 12:39:52.61 ID:j0JK3XOe.net]
- enumにメソッドを定義できないとenumスイッチがあちこちに書かれてシステムが汚染される
そんなことになるぐらいならenumは言語機能から追放したほうがいい
- 118 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 12:51:07.42 ID:kmdFzMTF.net]
- >>116
メソッドが使えるとスッキリ書けるの? 例を教えて
- 119 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 13:21:53.63 ID:WcVSvCUs.net]
- 読み方はエナメラブルでいいのかね
- 120 名前:デフォルトの名無しさん [2017/11/12(日) 13:26:58.08 ID:hG4wTZ8S.net]
- >>112
逆に聞きたいんだけど、どういう理解があると思ったの?
- 121 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 13:29:17.49 ID:j0JK3XOe.net]
- >>117
Javaのenumのメソッドはポリモーフィック なのでステートやストラテジーなど様々な応用が利く
- 122 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 14:44:05.96 ID:IOmcFQTN.net]
- enumはどうせ定数に置き換えられるんだから、最初から定数で書いとけばいいな
- 123 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 15:30:46.03 ID:Lnuis1wP.net]
- >>107
javaって、内部クラスも1ファイルとして出力されるんじゃなかったっけ?
- 124 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 16:08:56.10 ID:kmdFzMTF.net]
- class A,B,C,...が有って
void func<T>(...){...} みたいな関数を func<A>(...); func<B>(...); func<C>(...); みたいに順番に実行したい場合、 forループ使って書ける?
- 125 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 16:11:43.25 ID:MOg5phwx.net]
- >>122
>>107はソースの話やで? オブジェクトはまとめたらいいだけだし
- 126 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 16:17:52.85 ID:j0JK3XOe.net]
- >>123
var list = new dynamic[] { a, b, c }; foreach (var x in list) func(x); 引数もインスタンスも無いならreflection
- 127 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 16:33:07.06 ID:kmdFzMTF.net]
- >>125
なるほど。 dnamic使うしか無いんですね?
- 128 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 16:58:32.42 ID:RZNIwvSq.net]
- reflectionが目に入らぬか
- 129 名前:デフォルトの名無しさん [2017/11/12(日) 17:39:19.11 ID:UFCv5vw0.net]
- >>127
reflectionと言うのでやる方法を教えて下さい
- 130 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 17:39:26.99 ID:5vVJXllV.net]
- partical いいよなぁ
- 131 名前:デフォルトの名無しさん [2017/11/12(日) 18:01:29.09 ID:PNAmYcb6.net]
- >>119
APIはあっても、実際は例外投げるんじゃないかとか。 StreamやISerializableなど今まで散々レガシー扱いされてたのに、 すんなり実装されたのだったら、今までは何だったのかと思ってしまって。
- 132 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 18:02:25.44 ID:Lnuis1wP.net]
- >>124
「配置できるファイルに〜」のところもソースファイルの話だったか、失礼した
- 133 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 18:42:10.04 ID:WcVSvCUs.net]
- >>118
読み方はあっているのかい?
- 134 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 18:55:18.48 ID:52C+Ep3W.net]
- >>132
えにゅめらぶる
- 135 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 19:11:35.21 ID:Ti9eVPN+.net]
- >>133
いい難いなw
- 136 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 19:31:01.04 ID:WbI57bEd.net]
- あいえにゅめらぼー
- 137 名前:デフォルトの名無しさん mailto:sage [2017/11/12(日) 19:38:58.15 ID:RZNIwvSq.net]
- れっきょ
- 138 名前:デフォルトの名無しさん [2017/11/13(月) 01:47:33.98 ID:v8HXsfBj.net]
- >>126
リフレクション そもそも用途がわからんけど
- 139 名前:デフォルトの名無しさん [2017/11/13(月) 01:55:32.64 ID:v8HXsfBj.net]
- >>130
最初のリンクがそもそも.NETStandardの話なんだけど、.NETStandardとは何か知ってれば(最低限ググれば)前者は迷う余地がない 後者は経緯知らないけどレガシーが実装されたらだめという理由がない …と考える人が大多数だと思う
- 140 名前:デフォルトの名無しさん [2017/11/23(木) 11:44:32.89 ID:3aIXz7vh.net]
- C#でちょっとした文字列の連結を行う場合、+がいいのかFormatがいいのかReplaceがいいのかStringBuilderを使うのがいいのか悩んでます
どれが一番いいのでしょうか? 1. string value = A + "-" + B; 2. string value = string.Format({0}-{1}, A, B); 3. string value = "{A}-{B}".Replace("{A}", A).Replace("{B}, B); 4. StringBuilder sb = new StringBuilder(); sb.Append(A); sb.Append("-"); sb.Append(B);
- 141 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 11:50:10.15 ID:nWWLjgB9.net]
- こんな細かいことで悩んでいたら禿げるわ
それぞれにどれだけの差が出てくるか考えろよ
- 142 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 12:00:55.88 ID:+AsqqoLD.net]
- $"{A}-{B}" でしょ
- 143 名前:デフォルトの名無しさん [2017/11/23(木) 12:03:56.69 ID:3aIXz7vh.net]
- >>141
なるほど
- 144 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 12:04:14.40 ID:11MjDn+U.net]
- とりあえず、環境が許すなら141、駄目なら139の1
- 145 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 12:13:05.14 ID:1XchAmld.net]
- 連結ならいつもは分かりやすさ優先で+
実際に扱うデータで使ってみて遅いと感じたらStringBuilderに変えてるわ 置き換えは置き換えの時だし、フォーマット形式が必要と感じたらそれ使うし 悩むのかこれ…コーディング終わらんやろ…
- 146 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 12:20:49.75 ID:Go3NcBxu.net]
- 最初はくだらない事に悩むからしょうがない。直に、開き直るからそれまでとことん悩め。
- 147 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 12:24:20.12 ID:nWWLjgB9.net]
- >>145
こういうので悩みだすのはスキルが伸びず閉塞感に陥って逃げ道探しているときだw
- 148 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 12:28:18.93 ID:kBi82nCb.net]
- 4とか使うのは連結回数がクソ多いぐらいだな
- 149 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 14:17:08.77 ID:U/QtJVxM.net]
- StringBuilder必要なのはループで回す時くらいやろ
固定回数なら最適化されるんちゃうか しらんけど
- 150 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 15:17:10.10 ID:JqKYKF6h.net]
- 改行したい時はsb.AppendLine使う
var s = $@"hello {A} world"; 別にこれでもいいけど、インデントが気持ち悪い
- 151 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 18:08:06.61 ID:w+OP7Z8m.net]
- 数個程度の定数個の結合にStringBuilderは無いね
@""で改行入れたときの改行コードってソースコードの改行コードに依存するんかな
- 152 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 18:25:49.20 ID:Go3NcBxu.net]
- StringBuilder使うのは基本、ループ内で文字列結合するときだけだな
- 153 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 18:28:19.08 ID:zj6W6oGG.net]
- スレがボケジジイの繰り言みたいになってる
- 154 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 18:29:25.95 ID:Go3NcBxu.net]
- と書くと、問題あるな。あるメソッド内でループしてないから普通に文字列結合してても、
そのメソッドを使う方でループしてメソッド呼び出されたら・・ ということでなんでもない。
- 155 名前:デフォルトの名無しさん mailto:sage [2017/11/23(木) 19:44:15.73 ID:NThPFj2G.net]
- パフォーマンスは大差ないので可読性で選ぶ
となると 定数個なら+ 動的ならlinqとJoin
- 156 名前:デフォルトの名無しさん [2017/11/24(金) 08:32:28.20 ID:LQb8e4yU.net]
- public override と
override public とでは、どっちが普通ですか?
- 157 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 08:40:21.61 ID:GsVE4oKd.net]
- アクセス修飾子が先
- 158 名前:デフォルトの名無しさん [2017/11/24(金) 09:49:06.09 ID:LQb8e4yU.net]
- >>156
じゃあstatic使う場合は どこに入れるべきですか?
- 159 名前:デフォルトの名無しさん mailto:sage [2017/11/24(金) 11:32:34.25 ID:GsVE4oKd.net]
- アクセス修飾子が先
- 160 名前:デフォルトの名無しさん [2017/11/28(火) 20:01:33.21 ID:uo9ygS2y.net]
- EF Core + MariaDBで行ロックをするにはどうしたらいいですか?
- 161 名前:デフォルトの名無しさん mailto:sage [2017/11/29(水) 11:56:45.71 ID:/OzCwr8n.net]
- >>159
行ロックって何よ?
- 162 名前:デフォルトの名無しさん mailto:sage [2017/11/29(水) 12:25:04.50 ID:rN1pofYI.net]
- >>159
EFに明示的なロックは要らん 保存するときに他の変更があれば保存は失敗する
- 163 名前:デフォルトの名無しさん mailto:sage [2017/11/29(水) 15:02:54.88 ID:LyP2QHxX.net]
- EFは基本、楽観ロックだからね。
自分が更新するデータは誰も変更しないだろうということで楽観的に考えて行ロックを取得しない。 で、実際の更新時に、保存しておいたタイムスタンプ列や全列を比較して更新するUpdate文を 発行して誰も変更してなきゃ成功する。
- 164 名前:デフォルトの名無しさん mailto:sage [2017/11/29(水) 15:08:27.80 ID:LyP2QHxX.net]
- 対して、悲観的ロックは誰か変更するんじゃないかと悲観的に考え前もって行ロックする。
行ロック取得したければ、トランザクションの分離レベル変更して、間接的に取得すればいいんじゃねぇかな。 例えば、トランザクションをロックを使って実装してるデータベース使ってるなら、 トランザクションの分離レベルをREPEATABLE READにして読めば、読み込んレコードには 行ロックがかかる。
- 165 名前:デフォルトの名無しさん mailto:sage [2017/11/29(水) 15:52:26.83 ID:x/indGo0.net]
- >>161
楽観的排他制御ってやつか!?
- 166 名前:デフォルトの名無しさん mailto:sage [2017/11/29(水) 21:11:58.94 ID:fgyKG67K.net]
- リトライだらけになる
- 167 名前:デフォルトの名無しさん [2017/12/02(土) 10:37:02.24 ID:OECpFj6Y.net]
- Consoleアプリの関数Aから別のスレッドで関数Bをを実行。
Bが終わるまで数分かかるので、その間はAの処理を引き続きやる。 Bが終わったら何らかの通知をA(あるいはアプリ)で受けとる。 そんな処理をしたいのですが、どんな手法がお勧めですか?
- 168 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 11:20:32.34 ID:qE46CGT4.net]
- >>166
Hangfire
- 169 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 12:07:47.28 ID:pzCW2tCE.net]
- 書き捨てならポーリング
- 170 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 12:18:43.47 ID:dIIqSudI.net]
- >>166
普通にTaskとasync-await
- 171 名前:デフォルトの名無しさん [2017/12/02(土) 13:31:40.26 ID:OECpFj6Y.net]
- >>167
情報ありがとうございました。調べてみます。 >>168 それは何ですか? >>169 関数Aの中で関数Bの終了をawaitするとそこでAの処理が停止しますよね? それでは困るんです。
- 172 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 13:38:50.65 ID:/lrBlva0.net]
- 通知を受け取って何をするの?
Aが実行中に通知を受け取った場合は? Aが終わったあとに通知を受け取った場合は?
- 173 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 13:44:11.82 ID:M5ek0NUJ.net]
- >>171
終わったってフラグでも作っておけばいい 何のためにそんなこと聞くの?
- 174 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 14:11:31.35 ID:kxO6m70V.net]
- >>172
実際にコードに起こすこと考えたら>>171の疑問出てこない? ポーリングの有無とかB終了の通知はA以外で受けたほうがいいのかみたいな
- 175 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 14:21:45.96 ID:/lrBlva0.net]
- void A() {
... Task.Run(() => B()); ... ... } void B() { ... ... SetSomeFlag(); } こういうこと? 何をしたいのかハッキリしないな
- 176 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 14:22:18.75 ID:T9uGCJHM.net]
- >>170
関数BをTaskで実行しておいて、たまにTask.Wait(0)がtrueを返すか確認する
- 177 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 14:22:55.12 ID:M5ek0NUJ.net]
- >>173
何で目の前の問題置いて次の実装考えるの やり方が一つ決まったらそれでやり通す必要もないし 質問者の要件わからないのにそんなこと聞きだす必要はない
- 178 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 15:15:48.94 ID:XMkOweAB.net]
- 多分処理AはUIスレッドなんだろ
処理B実行中にUIは止めたくない そして処理B完了でUIを更新したい そんな要件だと想像した
- 179 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 15:34:29.65 ID:kxO6m70V.net]
- >>177
それだとInvokeやDispatcherの話にも広がりそうだね
- 180 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 16:57:04.20 ID:ax4ftaEq.net]
- >>177
consoleアプリって書いてあるやん
- 181 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 17:27:35.43 ID:2zJJAtZS.net]
- 10レスそこらも遡れないとかヤバすぎて草
- 182 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 18:20:58.48 ID:M5ek0NUJ.net]
- 元の話が設計で根本的におかしいか思い付きで質問しているかどっちか
後半に100ペリカ
- 183 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 20:31:53.15 ID:XMkOweAB.net]
- コンソールアプリなら
EventWaitHandle使うのが楽そう
- 184 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 21:02:27.32 ID:8UWC/wK0.net]
- WaitHandleは完了を待つ側のスレッドをブロックするから、
それでいいんだったら普通にasync-awaitでいい
- 185 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 21:06:19.33 ID:pzCW2tCE.net]
- せやね
- 186 名前:デフォルトの名無しさん [2017/12/02(土) 22:01:19.49 ID:hEzEqaaq.net]
- Aで何したいかだけどコールバックでいいんじゃないの
- 187 名前:デフォルトの名無しさん mailto:sage [2017/12/02(土) 22:11:03.11 ID:8UWC/wK0.net]
- だったらTask.ContinueWithでいいだろ
- 188 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 01:24:35.88 ID:R5bnWQiD.net]
- つかそもそも別スレッドで実行する必要があるのか
別プロセスで良いんじゃねえのか
- 189 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 10:20:17.77 ID:8EUneh2f.net]
- >>187
プロセス間のデータ受渡はsoket通信する感じ?
- 190 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 10:32:03.87 ID:eMfWVF0k.net]
- >>188
勝手に要件作る気なのかw しかも中身まで要エスパーとか
- 191 名前:166 mailto:sage [2017/12/03(日) 10:48:55.10 ID:fYwJfoN4.net]
- 皆さんレスありがとうございました。
>Aが実行中に通知を受け取った場合は? 関数Cを別スレッドで実行したいです。例えばこんなふうに。 void C(){ Console.WriteLine("Bが終わった"); } >Aが終わったあとに通知を受け取った場合は? Aは終わらないと言う前提でお願いします。
- 192 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 10:52:57.14 ID:eMfWVF0k.net]
- >>190
>>186に出ているだろ というかTaskメソッドをMSDNで調べろよ
- 193 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 11:54:26.84 ID:dO3du7bJ.net]
- ふらっと案件
- 194 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 12:01:59.74 ID:mrNMXEOK.net]
- フラット案件どころかこれだけレスとキーワード出ていて自分で解決できないのならプログラムやめるべき
- 195 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 12:09:59.71 ID:S5PX0FVt.net]
- 勘違いレスした奴もふらっと行きの刑で
- 196 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 12:14:39.54 ID:WBs9Zv02.net]
- 何でもいいけどすぐ動く完動品が出てくるまでこの調子だと思うぜ
どうせソースないんだろ、出てきたものを見ていじって作ろうとしてるんだろ
- 197 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 14:16:09.36 ID:VfzmjXdH.net]
- >>190
BとCについてはよく分かった Aが現状どういう処理をしているかによって 解決の仕方が違ってくると思うな
- 198 名前:デフォルトの名無しさん mailto:sage [2017/12/03(日) 21:08:04.26 ID:Or+Mlh4N.net]
- Aは終わらないという前提でちょっと笑った
|

|