!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■関連スレ
C#, C♯, C#相談室 Part93
http://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part141
http://mevius.5ch.net/test/read.cgi/tech/1544839627/
■コードを貼る場合は↓を使いましょう。
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/index
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
探検
ふらっと C#,C♯,C#(初心者用) Part142
■ このスレッドは過去ログ倉庫に格納されています
1名無C ◆jPpg5.obl6 (ワッチョイ 762c-FuHz)
2019/03/07(木) 06:35:41.12ID:6L3KEJfe0595デフォルトの名無しさん (ワッチョイ 2301-4ufv)
2019/04/28(日) 19:47:01.57ID:Cfig35XD0 >>582
そんなレスしかできないなら黙ってろよw
そんなレスしかできないなら黙ってろよw
596デフォルトの名無しさん (アウアウウー Sae9-HJzg)
2019/04/28(日) 19:50:07.37ID:KKCCRPTWa >>594
IDisposable無視して放置する人を野放しにしないためにもデストラクタは不要だと思うわ
デストラクタが呼ばれたか呼ばれないかで意図しないタイミングで不具合が出たりでなかったりするだけだろ
そんなの余計に邪魔だろ
IDisposable無視して放置する人を野放しにしないためにもデストラクタは不要だと思うわ
デストラクタが呼ばれたか呼ばれないかで意図しないタイミングで不具合が出たりでなかったりするだけだろ
そんなの余計に邪魔だろ
597デフォルトの名無しさん (アウアウエー Sa13-mEZ1)
2019/04/28(日) 19:50:40.18ID:uWFo9H7Wa さすがに自前で生成してない(解放しなくていい)オブジェクトはわざわざ解放しないよ
んーと、デストラクタを書かないといけないような処理があるならDispose(false)だけ書く、んだけど
なにか間違ったこと言ったかな
んーと、デストラクタを書かないといけないような処理があるならDispose(false)だけ書く、んだけど
なにか間違ったこと言ったかな
598デフォルトの名無しさん (ワッチョイ 2301-4ufv)
2019/04/28(日) 19:53:00.38ID:Cfig35XD0599デフォルトの名無しさん (アウアウエー Sa13-mEZ1)
2019/04/28(日) 19:54:05.58ID:uWFo9H7Wa 書く必要がないデストラクタなら書かずに済ませるというのは同意
というか普段アンマネージドリソースなんて滅多にさわらないし
まともにデストラクタを書いたのはいったい何年前だろう
というか普段アンマネージドリソースなんて滅多にさわらないし
まともにデストラクタを書いたのはいったい何年前だろう
600デフォルトの名無しさん (アウアウウー Sae9-HJzg)
2019/04/28(日) 20:00:46.55ID:KKCCRPTWa601デフォルトの名無しさん (アウアウクー MM81-K6Yl)
2019/04/28(日) 20:04:36.28ID:PHvM++pOM602デフォルトの名無しさん (アウアウエー Sa13-OsmV)
2019/04/28(日) 20:21:04.08ID:JJw12cyBa 解放忘れを本気で潰そうと思ったらさっき書いたようにファクトリーアイソレーションパターンを使う
Task ExecuteAsync(Func<ISomeResource, Task> job) {
using (var resource = new SomeResource()) {
await resource.OpenAsync();
await job?.Invoke(resource);
await resource.CloseAsync();
}
}
サービス利用者には生成も解放もインターフェースを提供しない
ExecuteAsyncを通さないとリソースにアクセスできないようにすれば解放忘れを完全に予防できる
Task ExecuteAsync(Func<ISomeResource, Task> job) {
using (var resource = new SomeResource()) {
await resource.OpenAsync();
await job?.Invoke(resource);
await resource.CloseAsync();
}
}
サービス利用者には生成も解放もインターフェースを提供しない
ExecuteAsyncを通さないとリソースにアクセスできないようにすれば解放忘れを完全に予防できる
603デフォルトの名無しさん (アウアウエー Sa13-7ni7)
2019/04/28(日) 20:28:37.93ID:kMBz0MBMa604デフォルトの名無しさん (ブーイモ MMa9-HJzg)
2019/04/28(日) 20:33:15.98ID:3t4t6vYZM605デフォルトの名無しさん (アウアウエー Sa13-7ni7)
2019/04/28(日) 20:37:42.11ID:kMBz0MBMa606デフォルトの名無しさん (ブーイモ MMa9-HJzg)
2019/04/28(日) 20:39:59.68ID:3t4t6vYZM バカチョンは意味が違う
607デフォルトの名無しさん (ブーイモ MMa9-HJzg)
2019/04/28(日) 20:42:39.60ID:3t4t6vYZM バカヨケ 失敗しないような仕組み
バカチョン 誰でも使える
バカチョン 誰でも使える
608デフォルトの名無しさん (ワッチョイ 2342-KxX0)
2019/04/28(日) 21:44:36.92ID:nV7r0mI50 >>592
コンテナdisposeしたら、ついでに中身も自動でやってほしいよな・・・
コンテナdisposeしたら、ついでに中身も自動でやってほしいよな・・・
609デフォルトの名無しさん (ワッチョイ 252d-t87J)
2019/04/29(月) 12:55:34.62ID:pjV/Nimc0 横からすまんがさあ
DIにMicrosoft.Extensions.DependencyInjection使ってるんだけど、これってコンテナから生成されたオブジェクトって永遠と生き続けるの?
どうやって開放するん?
DIにMicrosoft.Extensions.DependencyInjection使ってるんだけど、これってコンテナから生成されたオブジェクトって永遠と生き続けるの?
どうやって開放するん?
610デフォルトの名無しさん (ワッチョイ 23ad-O4pN)
2019/04/29(月) 13:05:11.30ID:ehYnqzb50 >>609
Scopeでググれ
Scopeでググれ
611デフォルトの名無しさん (アウアウエー Sa13-OsmV)
2019/04/29(月) 13:39:51.85ID:NUp+Ex1Ma 基本的に生成元になったスコープをDisposeするとスコープ管理下のオブジェクトがまとめて消える
スコープはCreateScopeで再帰的に生成できる
BuildServiceProviderで作ったプロバイダーはルートのスコープに生えてるプロバイダーと考えればいい
アッドシングルトンで登録したやつは親子関係にある全てのスコープで1つしか作れずルートスコープと寿命が同期
アッドスコープドで登録したやつは各スコープ内で1つしか作れず作ったスコープと寿命が同期
アッドトランジエントで登録したやつはスコープ内で何個でも作れて作ったスコープと寿命が同期
ASP.NET Coreでは暗黙的に1つのリクエストに1つのスコープを割り当てる
訂正あったらヨロ
スコープはCreateScopeで再帰的に生成できる
BuildServiceProviderで作ったプロバイダーはルートのスコープに生えてるプロバイダーと考えればいい
アッドシングルトンで登録したやつは親子関係にある全てのスコープで1つしか作れずルートスコープと寿命が同期
アッドスコープドで登録したやつは各スコープ内で1つしか作れず作ったスコープと寿命が同期
アッドトランジエントで登録したやつはスコープ内で何個でも作れて作ったスコープと寿命が同期
ASP.NET Coreでは暗黙的に1つのリクエストに1つのスコープを割り当てる
訂正あったらヨロ
612デフォルトの名無しさん (ワッチョイ 252d-t87J)
2019/04/29(月) 13:43:03.33ID:pjV/Nimc0 Scope = Asp.net用みたいな気になっていて全然知らなかったよ、ありがとう
ただDIなしの場合にusing句で書けるようなのはDIありでも簡単にかけそうだけど、オブジェクトを扱う箇所が数箇所に分かれてるときは難しそう・・・・
ScopeをDIコンテナに突っ込んだら突っ込んだでまた問題が増えるのかな・・・・
ただDIなしの場合にusing句で書けるようなのはDIありでも簡単にかけそうだけど、オブジェクトを扱う箇所が数箇所に分かれてるときは難しそう・・・・
ScopeをDIコンテナに突っ込んだら突っ込んだでまた問題が増えるのかな・・・・
613デフォルトの名無しさん (ワッチョイ 8dda-KxX0)
2019/04/30(火) 20:23:22.69ID:IHLGrYrL0 System.Globalization.JapaneseCalendarでeraを取得しているんだけど
Rが入ってこない・・・
Windows10でWindowsUpdateも最新なんだけど、何で入ってこないんでしょう
Rが入ってこない・・・
Windows10でWindowsUpdateも最新なんだけど、何で入ってこないんでしょう
614デフォルトの名無しさん (アウアウエー Sa13-jWJP)
2019/04/30(火) 20:28:08.43ID:w+F7NKD3a >>613
https://docs.microsoft.com/en-us/windows/uwp/design/globalizing/japanese-era-change
> To test that your application works with the new era, you must advance your computer's clock to May 1, 2019 or later.
PCの時刻設定を2019/05/01以降にする必要があるらしい
https://docs.microsoft.com/en-us/windows/uwp/design/globalizing/japanese-era-change
> To test that your application works with the new era, you must advance your computer's clock to May 1, 2019 or later.
PCの時刻設定を2019/05/01以降にする必要があるらしい
615デフォルトの名無しさん (ワッチョイ 4b2c-t8aL)
2019/04/30(火) 20:38:50.44ID:LbZ9KfXX0 まずまだアップデートはオプション段階だが、KB4493443入れてる?
正式なWindowsアップデートは5月以降だよ
正式なWindowsアップデートは5月以降だよ
616デフォルトの名無しさん (ワッチョイ 5d6f-KxX0)
2019/04/30(火) 20:45:03.73ID:YvhWBPAF0 KB4493443って、Windows8.1用だったような。
ちなみに、Windows10, version1809用は「近日公開予定」だそうで。
https://support.microsoft.com/ja-jp/help/4469068/summary-of-new-japanese-era-updates-kb4469068
ちなみに、Windows10, version1809用は「近日公開予定」だそうで。
https://support.microsoft.com/ja-jp/help/4469068/summary-of-new-japanese-era-updates-kb4469068
617デフォルトの名無しさん (アウアウエー Sa13-7ni7)
2019/04/30(火) 21:35:51.80ID:u6t/T7mma もう元号とかやめて欲しいよねほんとw
いい加減役所も西暦に一本化しろよ
いい加減役所も西暦に一本化しろよ
618デフォルトの名無しさん (アウアウエー Sa13-OsmV)
2019/04/30(火) 21:36:53.61ID:TyGEr2d8a 統一したら雑務が減っちゃうだろ
619デフォルトの名無しさん (ワッチョイ 4b2c-t8aL)
2019/04/30(火) 22:02:27.50ID:LbZ9KfXX0 >>616
訂正ありがと 手元にあるのが8.1で全部おんなじかと
訂正ありがと 手元にあるのが8.1で全部おんなじかと
620デフォルトの名無しさん (ワッチョイ 8dda-KxX0)
2019/05/01(水) 06:30:43.85ID:+0nnIASf0 皆さんレスどうもです
まだ対応待ちってことですね・・・
とりあえずいまはテスト用にレジストリいじれるしかなさそうですね
まだ対応待ちってことですね・・・
とりあえずいまはテスト用にレジストリいじれるしかなさそうですね
621デフォルトの名無しさん (ワッチョイ 252d-t87J)
2019/05/01(水) 14:39:10.04ID:NTU1YIA40 インデクサーってpublic T this[int I]{}みたいに定義するらしいけどさあ
ここに出てくるthisの部分って、this以外も入りうる余地ってあるの?
ここに出てくるthisの部分って、this以外も入りうる余地ってあるの?
622デフォルトの名無しさん (ワッチョイ 2d5f-KI0z)
2019/05/01(水) 14:49:13.86ID:lxO04VNX0623デフォルトの名無しさん (アウアウエー Sa13-jWJP)
2019/05/01(水) 14:51:52.86ID:U25K78xGa >>621
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/classes#indexers
> indexer_declarator
> : type 'this' '[' formal_parameter_list ']'
> | type interface_type '.' 'this' '[' formal_parameter_list ']'
> ;
入るのはthisだけで、this以外が入る余地はない
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/classes#indexers
> indexer_declarator
> : type 'this' '[' formal_parameter_list ']'
> | type interface_type '.' 'this' '[' formal_parameter_list ']'
> ;
入るのはthisだけで、this以外が入る余地はない
624デフォルトの名無しさん (ワッチョイ 252d-t87J)
2019/05/01(水) 15:04:58.50ID:NTU1YIA40 ありがとう
無いものについてパッとわかるとか驚くぜ
無いものについてパッとわかるとか驚くぜ
625デフォルトの名無しさん (ワッチョイ 67da-RYFy)
2019/05/02(木) 05:11:25.37ID:fWQ7EMkU0 メモ
https://www.enterprisedb.com/download-postgresql-binaries
https://www.devart.com/odbc/postgresql/
https://visualstudio.microsoft.com/ja/thank-you-downloading-visual-studio/?sku=Community&rel=16
https://www.nuget.org/packages/MySql.Data/
https://www.nuget.org/packages/Npgsql/
https://www.nuget.org/packages/dotConnect.Express.for.PostgreSQL/
https://www.nuget.org/packages/Microsoft.Office.Interop.Excel/
https://www.pgadmin.org/download/pgadmin-4-windows/
https://dev.mysql.com/downloads/
https://www.enterprisedb.com/download-postgresql-binaries
https://www.devart.com/odbc/postgresql/
https://visualstudio.microsoft.com/ja/thank-you-downloading-visual-studio/?sku=Community&rel=16
https://www.nuget.org/packages/MySql.Data/
https://www.nuget.org/packages/Npgsql/
https://www.nuget.org/packages/dotConnect.Express.for.PostgreSQL/
https://www.nuget.org/packages/Microsoft.Office.Interop.Excel/
https://www.pgadmin.org/download/pgadmin-4-windows/
https://dev.mysql.com/downloads/
626デフォルトの名無しさん (ワッチョイ 6763-7dwh)
2019/05/02(木) 06:26:48.77ID:qeQLZJi00 そういうのはQiitaでやれ(Qiita警察激怒)
627デフォルトの名無しさん (ワッチョイ 6763-xbwF)
2019/05/02(木) 12:04:50.67ID:ir+Ne9RR0 メモ系ツールなんて山ほどあるのにわざわざこんなところに書くのか
俺こんなの調べてんだぜすごいだろ?みたいな承認欲求なのかね?
俺こんなの調べてんだぜすごいだろ?みたいな承認欲求なのかね?
628デフォルトの名無しさん (ワッチョイ ce4a-S1/C)
2019/05/02(木) 19:31:55.56ID:Plm8DXbx0 初心者ですが、乱数系列の初期化(Randomクラスのオブジェクトの生成)は
どこに書くのが正解なんでしょうか?
関数の中に書くと、関数が呼び出されるたびに初期化されるんじゃ?と思えるのでちょっと拙い
関数の外側にプログラムの初めの辺に書いておけばいいのかなあ?とも思うのですが、それもカッコ悪い
どこに書くのが正解なんでしょうか?
関数の中に書くと、関数が呼び出されるたびに初期化されるんじゃ?と思えるのでちょっと拙い
関数の外側にプログラムの初めの辺に書いておけばいいのかなあ?とも思うのですが、それもカッコ悪い
629デフォルトの名無しさん (アウアウエー Sa3a-kXAv)
2019/05/02(木) 19:36:11.39ID:rtZHUO2Da >>628
依存性として注入するのが定石
依存性として注入するのが定石
630デフォルトの名無しさん (ワッチョイ ce4a-S1/C)
2019/05/02(木) 20:19:04.27ID:Plm8DXbx0 依存性 注入で検索したらいろいろ出てきたので調べてみます
631デフォルトの名無しさん (ワッチョイ cb02-Xm0a)
2019/05/03(金) 03:27:08.36ID:eVcW5sZJ0632デフォルトの名無しさん (ワッチョイ 9b61-oppc)
2019/05/03(金) 03:31:56.40ID:t597qxt20633デフォルトの名無しさん (アウアウエー Sa3a-3WjD)
2019/05/03(金) 12:41:41.06ID:Xwdpydd1a >>628
訳分からん解答が続いてるけど、素直に
インスタンス固有である必要があるならコンストラクタに
staticでよいなら静的コンストラクタに
書けばいいだけ。かっこ悪いとか、くだらないことに悩むのは時間の無駄。
この場合は不要だと思うけど、静的コンストラクタが実行されるのはそのクラスの
静的メンバーに初めてアクセスされたタイミングだと思ったので、その点は場合によっては注意
訳分からん解答が続いてるけど、素直に
インスタンス固有である必要があるならコンストラクタに
staticでよいなら静的コンストラクタに
書けばいいだけ。かっこ悪いとか、くだらないことに悩むのは時間の無駄。
この場合は不要だと思うけど、静的コンストラクタが実行されるのはそのクラスの
静的メンバーに初めてアクセスされたタイミングだと思ったので、その点は場合によっては注意
634デフォルトの名無しさん (アウアウエー Sa3a-kXAv)
2019/05/03(金) 12:51:40.57ID:JARezKaea635デフォルトの名無しさん (ドコグロ MM7a-jhVB)
2019/05/03(金) 13:16:48.56ID:JqDPcuspM private staticなら単体テストには支障ないだろ
厳密な再現性を求めるなら本来はシードを固定するべきだが
厳密な再現性を求めるなら本来はシードを固定するべきだが
636デフォルトの名無しさん (アウアウエー Sa3a-3WjD)
2019/05/03(金) 13:23:25.74ID:Xwdpydd1a どっからテストとか出てくるんだw
意味が分からん
意味が分からん
637デフォルトの名無しさん (ドコグロ MM7a-oppc)
2019/05/03(金) 13:28:31.30ID:5Dkgrzu1M638デフォルトの名無しさん (ドコグロ MM2b-jhVB)
2019/05/03(金) 13:39:56.17ID:ffSbfxo8M >>636
staticだとコンストラクタで実装を差し替えられないから単体テストの邪魔になりやすいというのは一般論としてはある
Randomを差し替える必要があるケースは極めて稀だが、上で述べたように厳密な再現性が求められるケースならありえなくもない
staticだとコンストラクタで実装を差し替えられないから単体テストの邪魔になりやすいというのは一般論としてはある
Randomを差し替える必要があるケースは極めて稀だが、上で述べたように厳密な再現性が求められるケースならありえなくもない
639デフォルトの名無しさん (アウアウエー Sa3a-kXAv)
2019/05/03(金) 13:45:36.92ID:JARezKaea640デフォルトの名無しさん (ワッチョイ f72d-/hjB)
2019/05/03(金) 13:57:48.60ID:Zy40eisO0641デフォルトの名無しさん (ドコグロ MM7a-jhVB)
2019/05/03(金) 14:05:21.52ID:N/aYDMHoM >>640
例えばガチャを作ってるとして、0-999の乱数で0-9が出たらSSRを排出する仕様なら、
0と9と10くらいを決め打ちでテストしたくなるだろ?
まあそのために乱数生成器をモックしなきゃいけないような設計には再考の余地があると思うが、状況としては普通にありえるだろう
例えばガチャを作ってるとして、0-999の乱数で0-9が出たらSSRを排出する仕様なら、
0と9と10くらいを決め打ちでテストしたくなるだろ?
まあそのために乱数生成器をモックしなきゃいけないような設計には再考の余地があると思うが、状況としては普通にありえるだろう
642デフォルトの名無しさん (ワンミングク MM92-sito)
2019/05/03(金) 14:07:16.80ID:roEz64M2M あなるあなる肛門肛門
643デフォルトの名無しさん (ワンミングク MM92-sito)
2019/05/03(金) 14:07:36.88ID:roEz64M2M すまん誤爆でした!!!
644デフォルトの名無しさん (アウアウエー Sa3a-3WjD)
2019/05/03(金) 14:09:46.15ID:Xwdpydd1a だから質問者はそんなこと聞いてないって...
どんだけ独りよがりの妄想展開するんだよ
どんだけ独りよがりの妄想展開するんだよ
645デフォルトの名無しさん (ワンミングク MM92-sito)
2019/05/03(金) 14:11:43.11ID:roEz64M2M >>644
うるせーばか子ね
うるせーばか子ね
646デフォルトの名無しさん (アウアウエー Sa3a-kXAv)
2019/05/03(金) 14:16:40.44ID:JARezKaea 現在時刻とか乱数みたいな制御しにくい値はインジェクションする
これ常識な
勉強になったねきみたち
これ常識な
勉強になったねきみたち
647デフォルトの名無しさん (ワッチョイ 9b61-oppc)
2019/05/03(金) 14:47:40.00ID:3MJf1YjB0648デフォルトの名無しさん (ワッチョイ 8252-M0pk)
2019/05/03(金) 15:12:05.72ID:uS7vqCXY0649デフォルトの名無しさん (アウアウエー Sa3a-kXAv)
2019/05/03(金) 15:31:58.12ID:JARezKaea >>648
それはアマチュアの考え方
それはアマチュアの考え方
650デフォルトの名無しさん (ワッチョイ 0b17-ahOC)
2019/05/03(金) 15:33:51.16ID:wCLW0/2P0 >>649
スレタイ読め
スレタイ読め
651デフォルトの名無しさん (スカファーイ FA9e-sito)
2019/05/03(金) 15:38:42.54ID:q0Uiy+aiA どーでもええわ
652デフォルトの名無しさん (ワッチョイ 6240-51S+)
2019/05/03(金) 15:58:52.41ID:Ue5NRrHW0 教えてください。
以下のコードで、x の定義は問題ないのに y の定義だけコンパイルエラーになってしまいます。
==
const Exception e = null;
const bool x = e == null; // エラーなし、true が設定される。
const Type t = null;
const bool y = t == null; // CS0133 y' に割り当てられた式は定数でなければなりません。
==
何が原因でこのような違いがでるのでしょうか。
また、y を定数のままエラーが出ないように修正することは可能でしょうか。
よろしくお願いいたします。
以下のコードで、x の定義は問題ないのに y の定義だけコンパイルエラーになってしまいます。
==
const Exception e = null;
const bool x = e == null; // エラーなし、true が設定される。
const Type t = null;
const bool y = t == null; // CS0133 y' に割り当てられた式は定数でなければなりません。
==
何が原因でこのような違いがでるのでしょうか。
また、y を定数のままエラーが出ないように修正することは可能でしょうか。
よろしくお願いいたします。
653デフォルトの名無しさん (ワッチョイ 9b61-oppc)
2019/05/03(金) 16:01:49.32ID:3MJf1YjB0 >>652
結果によってtrueやfalseになるようなんは定数と呼ばん
結果によってtrueやfalseになるようなんは定数と呼ばん
654デフォルトの名無しさん (アウアウエー Sa3a-3WjD)
2019/05/03(金) 17:46:27.38ID:Xwdpydd1a655デフォルトの名無しさん (アウアウエー Sa3a-3WjD)
2019/05/03(金) 17:53:37.68ID:Xwdpydd1a あ、なんか例外とか意味不明なこと書いてるけど突っ込まないでねw
656デフォルトの名無しさん (ワッチョイ 9b61-oppc)
2019/05/03(金) 18:53:11.77ID:78NC+NUs0657デフォルトの名無しさん (アウアウエー Sa3a-3WjD)
2019/05/03(金) 19:21:25.35ID:Xwdpydd1a 言語仕様の「定数式」の項を見れば別に不思議はないんだけど、
他人の書いたコードでこういう式を見たら一瞬「何の意図でこんな式を書いてるんだ?」
と思っちゃうね。
他人の書いたコードでこういう式を見たら一瞬「何の意図でこんな式を書いてるんだ?」
と思っちゃうね。
658デフォルトの名無しさん (ワッチョイ 6240-51S+)
2019/05/03(金) 20:24:56.25ID:Ue5NRrHW0 >>653
レスありがとうございます。
定数のまま、というのは const を付けたまま、という意味のつもりだったのですが、
表現が不適切だったかもしれません。失礼いたしました。
>>654
ありがとうございます!うまくいきました。
ちなみにいろいろ試してみると、
string は == が定義されているもののエラーが出ないようです。
さすがに string は特別ということのようですね。
(ただ、typeof(string).IsPrimitive は false にだったりして
いまいちしっくりきませんが。。。)
==
const string s = null;
const bool z = s == null; // エラーなし、true が設定される。
==
何にせよ、問題はすっきり解消いたしました。
適切なアドバイスどうもありがとうございました。
レスありがとうございます。
定数のまま、というのは const を付けたまま、という意味のつもりだったのですが、
表現が不適切だったかもしれません。失礼いたしました。
>>654
ありがとうございます!うまくいきました。
ちなみにいろいろ試してみると、
string は == が定義されているもののエラーが出ないようです。
さすがに string は特別ということのようですね。
(ただ、typeof(string).IsPrimitive は false にだったりして
いまいちしっくりきませんが。。。)
==
const string s = null;
const bool z = s == null; // エラーなし、true が設定される。
==
何にせよ、問題はすっきり解消いたしました。
適切なアドバイスどうもありがとうございました。
659デフォルトの名無しさん (ワッチョイ 6240-51S+)
2019/05/03(金) 20:25:45.58ID:Ue5NRrHW0 >>657
実際に const を使いたかったわけではなく、
問題の切り分けを行った結果として >>652 のように質問させていただいたのですが、
言われてみれば確かに何がしたいのかわからない・・・。
もう少し元の問題に近いコードを提示するなら、以下のような感じです。
==
const Type t = null;
if (t == null) Console.WriteLine("t is null.");
else Console.WriteLine("t is not null."); // 警告なし
const Exception e = null;
if (e == null) Console.WriteLine("e is null.");
else Console.WriteLine("e is not null."); // CS0162 到達できないコードが検出されました
==
実際に const を使いたかったわけではなく、
問題の切り分けを行った結果として >>652 のように質問させていただいたのですが、
言われてみれば確かに何がしたいのかわからない・・・。
もう少し元の問題に近いコードを提示するなら、以下のような感じです。
==
const Type t = null;
if (t == null) Console.WriteLine("t is null.");
else Console.WriteLine("t is not null."); // 警告なし
const Exception e = null;
if (e == null) Console.WriteLine("e is null.");
else Console.WriteLine("e is not null."); // CS0162 到達できないコードが検出されました
==
660デフォルトの名無しさん (アウアウエー Sa3a-3WjD)
2019/05/03(金) 20:54:20.72ID:mscz+0vpa >>659
いやいやいや、俺はおたくにケチつけたわけじゃないよw
const bool y = t == (object)null;
こういうのはぱっと見て意図が分からないと言っただけ。
むしろ「マジックナンバー」を避けるのは良い習慣ですよ
いやいやいや、俺はおたくにケチつけたわけじゃないよw
const bool y = t == (object)null;
こういうのはぱっと見て意図が分からないと言っただけ。
むしろ「マジックナンバー」を避けるのは良い習慣ですよ
661デフォルトの名無しさん (アウアウエー Sa3a-3WjD)
2019/05/03(金) 20:57:46.12ID:mscz+0vpa >>658
>string は == が定義されているもののエラーが出ないようです。
上にも書いたけど、その辺のモヤモヤはC#の言語仕様の「定数式」の箇所を見れば解消するよ。
VSのインストールフォルダに入ってる
>string は == が定義されているもののエラーが出ないようです。
上にも書いたけど、その辺のモヤモヤはC#の言語仕様の「定数式」の箇所を見れば解消するよ。
VSのインストールフォルダに入ってる
662デフォルトの名無しさん (アウアウエー Sa3a-UklA)
2019/05/03(金) 21:13:39.41ID:rGk2iQn5a ひょっとして、ES6あたりの感覚で代入onlyの変数を宣言したくてconstキーワードを使おうとしてるのかなと思ってみたり
readonlyなローカル変数みたいな構文ってC#にはまだないんだよね
readonlyなローカル変数みたいな構文ってC#にはまだないんだよね
663デフォルトの名無しさん (ワッチョイ 6240-51S+)
2019/05/03(金) 22:02:39.62ID:Ue5NRrHW0 >>660
> const bool y = t == (object)null;
> こういうのはぱっと見て意図が分からない
そうですねw
式の意味を考えるなら t == (object)null は
ReferenceEquals(t, null) と書くのがわかりやすいんでしょうけど
const うんぬんの話の中でこれはダメですし。
ちなみに今ふと思いついて試してみたんですが、
t is null も == の定義には依存しないものの定数扱いにはならないようです。
>>661
ありがとうございます。
言われてみると、そもそも C# と CLR の役割自体が正確に区別できていないような
気がしてきたので、これを機会に勉強してみようと思います。
> const bool y = t == (object)null;
> こういうのはぱっと見て意図が分からない
そうですねw
式の意味を考えるなら t == (object)null は
ReferenceEquals(t, null) と書くのがわかりやすいんでしょうけど
const うんぬんの話の中でこれはダメですし。
ちなみに今ふと思いついて試してみたんですが、
t is null も == の定義には依存しないものの定数扱いにはならないようです。
>>661
ありがとうございます。
言われてみると、そもそも C# と CLR の役割自体が正確に区別できていないような
気がしてきたので、これを機会に勉強してみようと思います。
664デフォルトの名無しさん (ワッチョイ 6240-51S+)
2019/05/03(金) 22:03:15.73ID:Ue5NRrHW0 >>662
質問させていただいたのは、
>>659 のコードみたいに CS0162 の警告が出てほしいのに
出てくれない場面があったからです。
でもたしかに readonly なローカル変数はあってもいいですよね。
あと、引数のみに依存して副作用もないメソッドについて
↓みたいな書き方が許されたらいいのに〜とか妄想しましたw
==
static class MathEx
{
public const double Square(double x) => x * x;
}
static class MyConstants
{
public const double SquarePI = MathEx.(Math.PI);
}
==
質問させていただいたのは、
>>659 のコードみたいに CS0162 の警告が出てほしいのに
出てくれない場面があったからです。
でもたしかに readonly なローカル変数はあってもいいですよね。
あと、引数のみに依存して副作用もないメソッドについて
↓みたいな書き方が許されたらいいのに〜とか妄想しましたw
==
static class MathEx
{
public const double Square(double x) => x * x;
}
static class MyConstants
{
public const double SquarePI = MathEx.(Math.PI);
}
==
665デフォルトの名無しさん (ワッチョイ 6240-51S+)
2019/05/03(金) 22:05:09.07ID:Ue5NRrHW0 何度もすみません。。。上の妄想コードは間違いです。
正しくはこちら。
==
static class MathEx
{
public const double Square(double x) => x * x;
}
static class MyConstants
{
public const double SquarePI = MathEx.Square(Math.PI);
}
==
正しくはこちら。
==
static class MathEx
{
public const double Square(double x) => x * x;
}
static class MyConstants
{
public const double SquarePI = MathEx.Square(Math.PI);
}
==
666デフォルトの名無しさん (ドコグロ MM02-jhVB)
2019/05/03(金) 22:55:31.79ID:1vSUmwo4M 実質的に定数ならJITコンパイル時に定数に置き換わるからそんなものは要らん
667デフォルトの名無しさん (ワッチョイ 7b38-lZel)
2019/05/03(金) 23:53:26.41ID:BZD1sthA0 decimalの定数は内部的にアレだけどな
668デフォルトの名無しさん (ブーイモ MM93-Mzt1)
2019/05/04(土) 07:03:09.32ID:Y3LpLEUoM >>667
詳しく
詳しく
669デフォルトの名無しさん (アウアウエー Sa3a-cevp)
2019/05/04(土) 13:03:57.01ID:3sktWiiHa670デフォルトの名無しさん (ワッチョイ f72d-/hjB)
2019/05/04(土) 14:32:15.09ID:IHSUUilV0 List.Addって、複数のスレッドから同時に呼び出したらデータが壊れる可能性ってあるの?
671デフォルトの名無しさん (ワッチョイ 06e3-ahOC)
2019/05/04(土) 15:00:48.03ID:NSx1pb1m0 >>670
スレッドセーフじゃないからlock制御を自前で持つか、System.Collections.Concurrentのコレクション使うべき
スレッドセーフじゃないからlock制御を自前で持つか、System.Collections.Concurrentのコレクション使うべき
672デフォルトの名無しさん (ワッチョイ c6da-ahOC)
2019/05/04(土) 15:23:49.46ID:H40F3Pfj0 Queueの出し入れもlock必要だし、マルチスレッドはめんどいよな。
なんでConcurrentDictionaryはあるのにListは無いのか
なんでConcurrentDictionaryはあるのにListは無いのか
673デフォルトの名無しさん (アウアウエー Sa3a-kXAv)
2019/05/04(土) 15:37:29.51ID:uz0VN5nda >>672
使い道がない
使い道がない
674デフォルトの名無しさん (ドコグロ MM7a-oppc)
2019/05/04(土) 15:38:02.55ID:vy21Hr2ZM 個人的にはスレッド自体に特定のスレッドからのデータを受け取る処理がある方が好き
675デフォルトの名無しさん (ドコグロ MM7a-jhVB)
2019/05/04(土) 15:57:05.65ID:qIB0qWQDM 別々のスレッドから生成された値を集めたいなら、
各スレッドで別のバッファ(List)に値を書き込んでから最後に単一スレッドでマージするのが定番
各スレッドで別のバッファ(List)に値を書き込んでから最後に単一スレッドでマージするのが定番
676デフォルトの名無しさん (ワッチョイ 9b61-oppc)
2019/05/04(土) 17:20:59.03ID:pMssk1qR0 スレッドセーフって実はどういう動作するのかよく知らないぜ
677デフォルトの名無しさん (ワッチョイ 06f2-ahOC)
2019/05/04(土) 17:27:01.27ID:0zm1CIpf0678デフォルトの名無しさん (ワッチョイ 9b61-oppc)
2019/05/04(土) 20:18:11.93ID:pMssk1qR0 APIのマニュアルにおいて「スレッドセーフ」という言葉が用いられる場合、たいていは「複数のスレッドからアクセスされても例外を出さない、プログラムがクラッシュしない」というような意味です。
しかしプログラムの目的によっては、例外が出ないだけでは不適切です。
例えば対象が、100個のデータを管理する変数だとします。
その100個のデータに対して、1つ目から順に処理するスレッドと、50個目から変更するスレッドが同時に動いたらどうなるでしょうか? 結果は不定です。
この例では、排他処理 (C#なら lock ステートメントなど) と呼ばれる処置が必要になります。
ってググって出たサイトで拾った
しかしプログラムの目的によっては、例外が出ないだけでは不適切です。
例えば対象が、100個のデータを管理する変数だとします。
その100個のデータに対して、1つ目から順に処理するスレッドと、50個目から変更するスレッドが同時に動いたらどうなるでしょうか? 結果は不定です。
この例では、排他処理 (C#なら lock ステートメントなど) と呼ばれる処置が必要になります。
ってググって出たサイトで拾った
679デフォルトの名無しさん (ワッチョイ 9b61-oppc)
2019/05/04(土) 20:25:20.65ID:pMssk1qR0 つまり
for(int i=0;i<lst.count;i++)
{
unk un=lst[i];
略
}
みたいなプログラムを組んだとき
どっかでいきなり要素をゼロにされて死ぬってことは
スレッドセーフだろうがどうだろうが可能性はあるってことだよね
ってことを考えるとスレッドセーフである意味ってあんまりなくて
排他処理は絶対実装しないと駄目だよね?ってこと?
誰か違うと言ってくれ
for(int i=0;i<lst.count;i++)
{
unk un=lst[i];
略
}
みたいなプログラムを組んだとき
どっかでいきなり要素をゼロにされて死ぬってことは
スレッドセーフだろうがどうだろうが可能性はあるってことだよね
ってことを考えるとスレッドセーフである意味ってあんまりなくて
排他処理は絶対実装しないと駄目だよね?ってこと?
誰か違うと言ってくれ
680デフォルトの名無しさん (ブーイモ MM93-R0y6)
2019/05/04(土) 20:59:32.71ID:Ui9BQ5TxM スレッドセーフはメソッド内などで一貫性を保てる作り
排他制御が必要な場面でやってないなど作り手のロジックミスには対応出来るわけがない
排他制御が必要な場面でやってないなど作り手のロジックミスには対応出来るわけがない
681デフォルトの名無しさん (ブーイモ MM93-R0y6)
2019/05/04(土) 21:06:21.08ID:Ui9BQ5TxM スレッドセーフである意味
あるオブジェクトがプロパティAを持っててメソッド内で
b=aaa(A)+bbb(A);
を計算しようとしても複数のスレッドからアクセスされることを考慮されていなければ
最初のAと次のAが違う場合があり計算結果が期待したものにならないかもしれない
スレッドセーフはこういう場合でもちゃんと計算される仕組みを持つ
あるオブジェクトがプロパティAを持っててメソッド内で
b=aaa(A)+bbb(A);
を計算しようとしても複数のスレッドからアクセスされることを考慮されていなければ
最初のAと次のAが違う場合があり計算結果が期待したものにならないかもしれない
スレッドセーフはこういう場合でもちゃんと計算される仕組みを持つ
682デフォルトの名無しさん (アウアウエー Sa3a-cevp)
2019/05/04(土) 21:07:23.59ID:3sktWiiHa >>679
その処理は要素数チェックと要素アクセスが分かれているから、間に他スレッドからの処理が割り込み得る
System.Collections.Concurrent系のコレクションは、
例えば「要素があるなら取得」のようなまとまった処理がatomicになっているので、他スレッドからの割り込まれない(=スレッドセーフ)
どっかのスレッドで詰めて、別のスレッドでループ処理、がやりたいのならBlockingCollectionが楽
その処理は要素数チェックと要素アクセスが分かれているから、間に他スレッドからの処理が割り込み得る
System.Collections.Concurrent系のコレクションは、
例えば「要素があるなら取得」のようなまとまった処理がatomicになっているので、他スレッドからの割り込まれない(=スレッドセーフ)
どっかのスレッドで詰めて、別のスレッドでループ処理、がやりたいのならBlockingCollectionが楽
683デフォルトの名無しさん (ドコグロ MM7a-jhVB)
2019/05/04(土) 21:27:48.58ID:qIB0qWQDM684デフォルトの名無しさん (ワッチョイ e22f-GsKc)
2019/05/04(土) 22:09:10.98ID:56LrGuhB0 非同期処理は複数のスレッドが同じデータを弄ろうとすることによる不整合は起きないけど
コールスタックは複数になるから
同じデータに触ると訳ワカメになる事があった
コールスタックは複数になるから
同じデータに触ると訳ワカメになる事があった
685デフォルトの名無しさん (ワッチョイ 9b61-oppc)
2019/05/04(土) 23:16:04.81ID:pMssk1qR0 (||゚Д゚)ヒィィィ!(゚Д゚||)
じゃあ>>679みてーな処理を書いたら
スレッドセーフなんて関係なく
バグるんだね
こぇえええええ
じゃなくて終わったわ
今まで組んだもんでテキトーにやった箇所全部終わってる気がする
じゃあ>>679みてーな処理を書いたら
スレッドセーフなんて関係なく
バグるんだね
こぇえええええ
じゃなくて終わったわ
今まで組んだもんでテキトーにやった箇所全部終わってる気がする
686デフォルトの名無しさん (アウアウエー Sa3a-UklA)
2019/05/04(土) 23:28:33.99ID:J15hVQV0a まあ複数スレッドで同時並行処理するときにはそのへん慎重を期さないと
再現困難なバグを埋め込んじゃうからねえ
同時に読み書きする可能性のある変数を安易に書き換え/差し替えしちゃダメ
再現困難なバグを埋め込んじゃうからねえ
同時に読み書きする可能性のある変数を安易に書き換え/差し替えしちゃダメ
687デフォルトの名無しさん (ワッチョイ e22c-4xtZ)
2019/05/05(日) 05:07:07.08ID:tvdtPjB+0 マルチスレッドの恐ろしさは、たまにしかバグらない事。
ほとんどは正常に動くから、質が悪い。
必ず、バグらないだろ
それで喧嘩になる事も多い。
マルチスレッドは、ベテランでもバグるからやめろと言っても、
ほら、バグらないでしょ? と、突っかかってくる
その時には、バグらないと言うと、
千回実行しても、バグらないでしょ? と、突っかかってくる。
でも、その時にはバグらない
バグる立証をするのが難しい
だから、Ruby をやった人は、関数型言語のElixir をやる。
他の言語の人は、何を言っても、そのテスト回数でバグらないと言ってくるから、質が悪い
1万回実行しても、10万回実行しても、その時にはバグらないものなんだよ。
何回バグらないで実行すれば、正しいと認めるのか、と問われても困る
ほとんどは正常に動くから、質が悪い。
必ず、バグらないだろ
それで喧嘩になる事も多い。
マルチスレッドは、ベテランでもバグるからやめろと言っても、
ほら、バグらないでしょ? と、突っかかってくる
その時には、バグらないと言うと、
千回実行しても、バグらないでしょ? と、突っかかってくる。
でも、その時にはバグらない
バグる立証をするのが難しい
だから、Ruby をやった人は、関数型言語のElixir をやる。
他の言語の人は、何を言っても、そのテスト回数でバグらないと言ってくるから、質が悪い
1万回実行しても、10万回実行しても、その時にはバグらないものなんだよ。
何回バグらないで実行すれば、正しいと認めるのか、と問われても困る
688デフォルトの名無しさん (ワッチョイ e201-R0y6)
2019/05/05(日) 06:10:17.07ID:BzgWdCy40 アクマノショウメイ
689デフォルトの名無しさん (ドコグロ MM02-jhVB)
2019/05/05(日) 08:46:40.02ID:TKrOuc6uM >>687
喧嘩になるのはマルチスレッドのバグのせいではなくお前の頭がバグってるから
喧嘩になるのはマルチスレッドのバグのせいではなくお前の頭がバグってるから
690デフォルトの名無しさん (ワッチョイ 0663-Cg3z)
2019/05/05(日) 08:57:36.80ID:Vqy33e5r0 エビデンスとれてりゃ突きつけるだけなのに
691デフォルトの名無しさん (ワッチョイ 8252-M0pk)
2019/05/05(日) 10:34:54.98ID:RPhfdkos0 >>687
マルチスレッドはバグるからやめろってなるのでなく、バグが無いように作れよ。
あと、お前の意見を相手が聞き入れず喧嘩になるのは、お前がいつもバカなことを言うから相手は当然受け入れる気にならず、お前にはその自覚がなくて「何でアイツは僕の言うことを理解してかれないんだウワアーーー」ってなってるからだぞ。
マルチスレッドはバグるからやめろってなるのでなく、バグが無いように作れよ。
あと、お前の意見を相手が聞き入れず喧嘩になるのは、お前がいつもバカなことを言うから相手は当然受け入れる気にならず、お前にはその自覚がなくて「何でアイツは僕の言うことを理解してかれないんだウワアーーー」ってなってるからだぞ。
692デフォルトの名無しさん (ワントンキン MM92-sito)
2019/05/05(日) 10:45:50.32ID:bYgaGqRgM >>687
なんでバグが起こってるのか原因特定出来てなくてワロタ
なんでバグが起こってるのか原因特定出来てなくてワロタ
693デフォルトの名無しさん (ワッチョイ 9b61-oppc)
2019/05/05(日) 10:48:34.16ID:uudMW5nw0 スレッドセーフは単発のメソッドが競合しないだけで
一連の処理についての動作保証をするものではないと
マルチスレッドはやらなくていいならそれに越したことはないけど
絶対に駄目というわけではなく
排他処理を組まないことが害悪
一連の処理についての動作保証をするものではないと
マルチスレッドはやらなくていいならそれに越したことはないけど
絶対に駄目というわけではなく
排他処理を組まないことが害悪
694デフォルトの名無しさん (アウアウエー Sa3a-kXAv)
2019/05/05(日) 11:21:06.67ID:IBoHsNppa 排他制御をしなくても安全に並列処理できるように設計することが大事
まずはロック、クリティカルセクション、ミューテックス、セマフォ、といった待ち時間を発生させるタイプの機能を使ったら負け、というルールで設計に挑戦してみるといい
大半の並列処理でそんなものは必要ないこと、それらを使わないほうが圧倒的に設計とプログラムが綺麗になることを体験するべき
まずはロック、クリティカルセクション、ミューテックス、セマフォ、といった待ち時間を発生させるタイプの機能を使ったら負け、というルールで設計に挑戦してみるといい
大半の並列処理でそんなものは必要ないこと、それらを使わないほうが圧倒的に設計とプログラムが綺麗になることを体験するべき
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「中国側も日本機のレーダーを感知していた」 中国メディアが報道 [♪♪♪★]
- 【YouTuber】バイク事故で入院のゆたぼん、振込で「お見舞金」募る [muffin★]
- 高市早苗首相、消費税減税に後ろ向き 足かせはレジシステム? 「責任ある積極財政」期待高いが [蚤の市★]
- 堀江貴文、キャッシュレス非対応の店にモヤッ 『PayPay』立ち上げの人物にまさかの直談判「現金決済しかできないんだけど…」 [冬月記者★]
- 低所得層のマクドナルド離れが深刻に 広がる「ファストフード格差」の真相 米国 [少考さん★]
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★7 [七波羅探題★]
- 中国がここまで過敏になるのは日本に前科があるから。盧溝橋、満州事変。ジャップの先制攻撃は挙げればキリがないけど [472617201]
- 防衛省、中国を完全論破www 「事前通告があったのは海自であって空自ではない」 高市早苗勝利 [175344491]
- エイとかいうどう見ても魚っぽくない奴いるよな
- 乳首触らんと立たないやつ
- 一人ぼっち、ガチで辛かった…
- きつねき
