20/06/11 22:54:47.74 Yd9qBDmj0.net
>>106
普通Redis
117:デフォルトの名無しさん
20/06/11 22:58:40.14 vRuHoTo/0.net
みなさんさんくす
>>107
oracle使ってるの?有償で本格的なイメージ
>>108
SQLiteいいですよね、お手軽そうで
>>109
AccessってC#で使えるんですね、Access使い慣れてる人ならよさげ
>>110
Postgreも人気ですね、SQLiteよりもいいのかな
118: 111 SQLServerが一番に名前出てくると思ってました 112 PostgreはC#と親和性高いのかな 見事に割れてるような感じがするのですが、C#.netと相性がいい悪いより 使い慣れてるものを使ってる感じですか
119:デフォルトの名無しさん
20/06/11 23:01:51.55 vRuHoTo/0.net
>>116
さんくす、初めて聞きましたRedis,NoSQLサーバーですか
これから主力になっていくのかな
120:デフォルトの名無しさん
20/06/11 23:09:04.11 Yd9qBDmj0.net
目的が違うからRDBとは共存するんじゃね?
永続化が出来るのが他のKVSと違う所。
121:デフォルトの名無しさん
20/06/11 23:21:42.50 5eBlYw+xa.net
C#との親和性とか言われてもなあ
いまどき大抵のDBMSでEFも使えるから、極端な話DBMSを途中で乗り換えても
C#で書き換えるのはconfigファイルの接続文字列とNuGetするパッケージだけ
EF使わないならSQLの方言を気にする必要はあるけどそれは組み立てるStringが変わるだけだし
DBMSに応じてC#ソースコードの書き方が変わるようなことは一切ない
122:デフォルトの名無しさん
20/06/11 23:49:42.34 tnq3MU310.net
EFみないなORM使ってないとOracle->SQL Serverの書き換えとか地獄よ
123:デフォルトの名無しさん
20/06/12 02:18:27.53 opbb+AId0.net
>>115
それが問題になるケースってどんなん?ASP.NET Core Identityとかも別に普通に使えてるけど
124:デフォルトの名無しさん
20/06/12 02:21:54.36 opbb+AId0.net
>>120
親和性は今でも問題になるケースがあるよ
OracleはEF Coreが出てから対応するまでに3年かかったし、EF Core3.0はOracleが対応する前にサポート期間が終わっちゃった。3.1のbeta版が少し前にやっと出たとこで、RTMになるころにはもうEF Core5が出てるw
125:デフォルトの名無しさん
20/06/12 03:34:44.54 ZwJzd5pPd.net
>>120
>C#で書き換えるのはconfigファイルの接続文字列とNuGetするパッケージだけ
>DBMSに応じてC#ソースの書き方が変わるようなことは一切ない
これは嘘。DbContextOptionsBuilderの拡張メソッドはDBMSごとに異なるし、そのオプションも変わってくる。当然Migration用のコードは再度生成する必要がある。まあその程度で済むんだけどね。
126:デフォルトの名無しさん
20/06/12 03:36:16.16 ZwJzd5pPd.net
「NuGetする」って表現は初めて見たな。言いたいことはわかるけどw
127:デフォルトの名無しさん
20/06/12 10:19:25.67 LH1ywJSs0.net
>>119
これからNOSQLも勉強しないとダメなのかサンクス
>>120
さんくすねDBMSはどれ選んでもだいたい同じですか
>>123-124
なるほどね、細かなところ互換性問題あるけど、それほど困ることもないですか
まあDBMSコロコロ変更したりしないだろし、さんくす
欲をゆえば、これは定番でみんな使ってるし、迷ったらコレみたいのがあったらよかた
128:デフォルトの名無しさん (テテンテンテン MM7f-3sqf)
20/06/12 10:33:37 67KMUSUMM.net
オンプレかクラウドかにも依るだろう
オンプレならできればDBの運用保守はベンダーに丸投げしたいところだが、
そこまでするほどの規模ではないならSQL Serverが比較的楽だろう
クラウドだったら自分でインフラを管理する必要のない完全マネージドなサービスを選ぶべきだ
例えばAWSならPostgresベースのAurora、AzureならSQL Database(SQL Serverベース)になるだろうな
129:デフォルトの名無しさん
20/06/12 11:11:40.32 kFexpNJ30.net
>>106
Ruby on Rails の3大DB は、
PostgreSQL, MySQL/MariaDB, SQLite
ただし、SQLite は開発用のみ
130:デフォルトの名無しさん
20/06/12 20:30:56.85 LH1ywJSs0.net
>>127
なるほど、クラウドなら相手先でだいたい決まってるんですね
結局仕事でプログラマやってる人はSQL全部やってそうな、さんくす
>>128
さんくす、Webアプリと連携したりするならPostgreとかMySQLは必須っぽいですね
131:デフォルトの名無しさん
20/06/13 00:57:45.04 bzHb5W4o0.net
>>122
アノテーション必須なところ
132:デフォルトの名無しさん
20/06/13 01:09:18.28 8SrQpLbj0.net
>>130
アノテーション?Javaと勘違いしてない?
もしかして、[Column("some_column")]みたいなAttributeを明示的にプロパティに付与しなきゃってことを言いたいの?
133:デフォルトの名無しさん
20/06/13 01:10:23.05 8SrQpLbj0.net
最近はそもそもAttributeはあまり推奨されてないと思うんだけど…
134:デフォルトの名無しさん
20/06/13 01:13:19.59 bzHb5W4o0.net
間違えた、そう、アトリビュートね
推奨されてないならますます必須なのは困るだろ
135:デフォルトの名無しさん
20/06/13 01:33:01.52 8SrQpLbj0.net
Fluent APIが主流だっていう意味でAttributeは推奨されてないって言ったんだけど通じてない??
136:デフォルトの名無しさん
20/06/13 01:41:17.85 8SrQpLbj0.net
naming conventionはかなり自由度が高いんだし、PostgreSQLならこんなプラグインもあるでしょ?
URLリンク(github.com)
137:デフォルトの名無しさん
20/06/13 01:44:19.43 8SrQpLbj0.net
このプラグイン書いてるのもEF Coreのメンテナーだし、PostgreSQL対応は相当手厚いと思うんだけど…Oracleとは大違いw
138:デフォルトの名無しさん
20/06/13 02:34:08.73 bzHb5W4o0.net
手厚いなら標準でサポートしろ
139:デフォルトの名無しさん (ワッチョイ ffad-E8/F)
20/06/13 03:17:01 8SrQpLbj0.net
標準でサポートしてるAPI使ってるでしょ?
140:デフォルトの名無しさん (ワッチョイ ffad-E8/F)
20/06/13 03:17:49 8SrQpLbj0.net
会話にならない…
141:デフォルトの名無しさん (スッップ Sd1f-E8/F)
20/06/13 03:28:12 wwBJVROwd.net
>>130
なぜ必須だと思いこんでしまったのか…少しググれば↑のプラグインも出てくるというのに。
DBMSによって異なる仕様を全てコアのライブラリに取り込んでしまうのはアンチパターン。拡張可能なエンドポイントを用意して、適切な粒度で分けないと。
142:デフォルトの名無しさん
20/06/13 03:44:26.62 8SrQpLbj0.net
そもそもなぜAttribute必須(だと思いこんでいる)かって理由もまだ一言も聞いてないしね
Fluent APIすら知らないようだし…
143:デフォルトの名無しさん (ワッチョイ 6fc7-Z00E)
20/06/13 13:23:26 K/U+GWpl0.net
rpgツクールみたいなソフトはC#とC+どちらがいいんでしょうか
electronではだめなのですか?
144:デフォルトの名無しさん
20/06/13 13:48:37.68 KtzqJ+vF0.net
勝手にしろ
145:デフォルトの名無しさん
20/06/13 14:08:02.51 o48rgnPS0.net
>>142
好きなやつでいいよ
146:デフォルトの名無しさん (ワッチョイ f3da-lWkb)
20/06/13 14:47:15 YToltj6/0.net
普通マシンコード直打
147:デフォルトの名無しさん
20/06/13 23:27:18.32 V91HObFW0.net
ツクールは、Ruby じゃないの?
スレ立てるまでもない
148:質問はここで 153匹目 https://mevius.5ch.net/test/read.cgi/tech/1586142285/845 870 の投稿も見て
149:デフォルトの名無しさん (ワッチョイ 3378-NjyN)
20/06/13 23:51:50 KtzqJ+vF0.net
RGSSがRubyで書けるだけで本体はRuby製じゃないだろ
最近のやつは知らないけれどRPGツクール2000はDelphi製だよ
つかこいついつものRubyガイジか
150:デフォルトの名無しさん (ワッチョイ 1363-UKCU)
20/06/14 00:29:11 d5or7MKc0.net
ちなみに最新のRPGツクールMVはHTML5&CSS&Javascript
151:デフォルトの名無しさん
20/06/14 01:26:19.14 v+4IVp6H0.net
>>147
そう、いつものRubyバカだよ。
どこかで聞き齧った上辺だけの知識を、古いまま更新もせずあちこちで思うがままに垂れ流す、迷惑きわまりない存在。
152:デフォルトの名無しさん
20/06/14 02:49:46.49 elQ0/Qc7a.net
くだらない質問で申し訳ない
static IEnumerable<char> AToZ()
{
for (char c = 'A'; c <= 'Z'; c++) yield return c;
}
static IEnumerable<string> AAAToZZZ(int n)
{
if (n < 0) throw new IndexOutOfRangeException();
if (n == 0) yield break;
if (n == 1) foreach (var c in AToZ()) yield return c.ToString();
foreach (var c in AToZ())
foreach (var item in AAAToZZZ(n - 1))
yield return c + item;
}
こういうシーケンスもっと短く綺麗に書ける?
nが負の時の処理はこだわらない。(例外投げずに空のシーケンスを返すのでも可)
どうでもいいけど、yield returnとreturnは混在できなことを今日初めて知ったw
153:デフォルトの名無しさん
20/06/14 03:07:11.97 elQ0/Qc7a.net
こうじゃなきゃダメかw
static IEnumerable<string> AAAToZZZ(int n)
{
if (n < 0) throw new IndexOutOfRangeException();
switch (n)
{
case 0:
yield break;
case 1:
foreach (var c in AToZ()) yield return c.ToString();
break;
default:
foreach (var c in AToZ())
foreach (var item in AAAToZZZ(n - 1))
yield return c + item;
break;
}
}
154:デフォルトの名無しさん (アウアウカー Sac7-P9YK)
20/06/14 03:59:43 Lj4n2emQa.net
よくわからないけどRPGのデータベースから
単なる所持品表示と
装備品表示でBoolean型を使うなら状況が変わるのかな?
155:デフォルトの名無しさん
20/06/14 05:02:05.56 HJp96S060.net
>>151
再起なんかせずにEnumetable.Repeatで必要文字数作って返すのじゃ駄目なん?
156:デフォルトの名無しさん
20/06/14 13:47:32.96 EPf5hgHv0.net
再起嫌いだわ
難しいことせず素直に書くならこうかな
static IEnumerable<string> AAAToZZZ(int n)
{
if (n < 0) throw new IndexOutOfRangeException();
IEnumerable<string> result = AToZ();
for(i = 1; i < n; i++)
result = Hoge(result, AToZ());
return result;
}
static IEnumerable<string> Hoge(IEnumerable<string> items1, IEnumerable<string> items2)
{
// items1+items2の組み合わせ
foreach (var item1 in items1)
foreach (var item2 in items2))
yield return item1 + item2;
}
157:デフォルトの名無しさん
20/06/14 17:59:06.56 HWVPFncU0.net
少し汎用化してみた
URLリンク(dotnetfiddle.net)
158:デフォルトの名無しさん (ワッチョイ 7361-TrMf)
20/06/14 22:16:24 ZbFg49iQ0.net
>>154
n=0の動きがかわっちゃってない?
159:150
20/06/14 23:20:59.70 FMtFwmQda.net
みなさんありがと
やっぱり劇的に単純化できるような方法はないか
>>154
俺は再帰使った方が簡単に感じるなあ
この辺は人それぞれなんだろうか
>>155
面白いけど可読的かなあ
ビール飲みながら読んでたら頭が痛くなってきたw
ところでこういう処理をCartesianと呼ぶのは一般的なの
160:? 何でデカルト? n次元の直交座標をスキャンしていくイメージ...?
161:デフォルトの名無しさん
20/06/14 23:38:18.81 gmXZN8yKa.net
2次元配列の逐次処理は3Dの棒グラフだから
どう見てもデカルト
162:デフォルトの名無しさん (ワッチョイ 4359-lMPZ)
20/06/15 12:58:53 G4ousd2n0.net
プログラムに日本語が使われた物って、日本語がインストールされていない環境でも動きますか?
変数名などに日本語を使って海外へのローカライズ時にはUIのみをその国の言語に差し替える感じで。
163:デフォルトの名無しさん
20/06/15 18:13:18.65 yRL+7o6a0.net
>>159
作成したexeのUI(たとえばButtonコントロールのTextに「押しボタン」とか)が
日本語表示でも、文字化けが問題ないならば動くことは動く
プログラム自体の変数名(たとえば「int 合計」みたいな)であればユニコードで
保存されているはずなのでコンパイルは通るらしいけど、日本語の表示が
できない環境では読めないソースになる
プログラム実行時の画面表示でローカライズってどうやるのっていう話ならば
言語ごとのリソースを作って対応するのが普通なので「c# 国際化対応」で
ググると色々サンプルが出てるよ
164:デフォルトの名無しさん (ワッチョイ 4359-lMPZ)
20/06/15 19:19:37 G4ousd2n0.net
>>160
複数パターンの回答感謝です。
ありがとうございます。
回答いただいた2例目が自分のパターンになると思います。
ソースコードを読まれる事を想定していない場合はコンパイルが出来れば、実行ファイルは問題なく動くという事でしょうか?
今ゲームを作っていて、海外にも配布したいです。
enumで管理している状態異常の名前などが英語だと長くてわかりにくいので日本語にしたいです。
例えばapple.pngをりんご.pngにしたりするのも問題ないでしょうか?
165:デフォルトの名無しさん
20/06/15 19:37:58.08 leNERqqha.net
日本語ファイル名は文字化けしてたら
ファイル読み込みでエラーになりそう
ローマ字にしといたら良いんでないの
166:デフォルトの名無しさん
20/06/15 19:41:29.43 MF7iklGs0.net
そっちはUnicodeだから恐らく大丈夫
167:デフォルトの名無しさん
20/06/17 13:51:06.28 e85N0kXp0.net
エクスプローラーのようなファイラアプリを作っているのですが、DirectoryInfo等を利用してその都度ストレージからフォルダ構造やファイルなどを拾い上げると時間がかかってしまうためこちらでキャッシュしたいと考えています
フォルダツリーやフォルダ下にあるファイルなどの情報をキャッシュするのに適したものってなんでしょうか?
jsonでそのまま多次元配列としてシリアライズするのが最も簡単そうには思えますが、合計ファイル数が1万件近くあるとファイルサイズやパフォーマンス的にsqlite3などを利用したほうが良いのかなと色々迷ってます
168:デフォルトの名無しさん
20/06/17 13:57:54.70 0xoIejs00.net
根本的にアプローチが間違っている。
ローカルドライブならMFTを直接読んで処理すべき。
169:デフォルトの名無しさん
20/06/17 15:25:29.42 GES6ctGCF.net
エクスプローラーも1万件あるとあきらかに遅くなる
170:デフォルトの名無しさん (ワッチョイ b602-vBZN)
20/06/17 15:38:18 yVuIICiL0.net
低レイヤのこと詳しくないけどそもそもGetDirectoriesとかGetFilesもMFTから読み込んでるんじゃないの?
FindFirstFileのラッパーなはずだけどFindFirstFileの内部ではそうしてるもんだと思ってたが
171:デフォルトの名無しさん
20/06/17 15:46:17.14 0xoIejs00.net
MFTはNTFSにしかないから、
SDカード(普通FAT系)とかネットワーク
ドライブなら
FindXXの高レベルAPIを使用する事に
なるよ。
書籍ならWindows Internals (chap12
なのでpart2)に説明がある
Qiitaで見かけた記憶があるのでこちらを
探すってのもありかと
172:デフォルトの名無しさん (アウアウウー Sa47-7nK8)
20/06/17 15:56:57 wCFe9G62a.net
>>164
そもそも本当に体感できるほど時間かかるかなあw
連番をプリフィクスしたファイル名でデータを保存する、なんて処理を結構書いてて、
その場合は当然ディクトリ内のファイル名を走査して開いてる番号を探すわけだけど、
少なくとも数千件程度のファイル数で体感できるような処理時間を感じたことはないが...
173:デフォルトの名無しさん
20/06/17 19:29:16.87 TZB3F6Mj0.net
ファイルやフォルダを画面に描写する処理に時間がかかってたりするパターンでは?
174:デフォルトの名無しさん (ワッチョイ 5fda-EdQi)
20/06/18 06:00:16 /GutDtHv0.net
エスパー視点だと、切断されたネットワークドライブ探して時間がかかってる。
175:デフォルトの名無しさん (ワッチョイ 0b01-oh81)
20/06/18 07:14:38 tX12dTLd0.net
アドバイスでもなんでもないが俺も昔自分用のファイルDB作ってたんだが
起動時に対象フォルダ下のファイルをGetFilesやGetDirectoriesで収集 → DBからタグ等の細かい情報取ってきてくっ付けるってやるとき、sqliteから一つ一つwhere fullpathというように文字列で検索すると約5000件/3分くらいかかったんだよな
そこでwhereを入れず全部取得 → while (reader.Read()) sqFiles.Add();と一旦こちらのリストに全部放り込んでから
愚直にforでリストからフルパスと一致するものを探すって方式に変えたら5000件/500msというアホみたいに高速化された思い出がある
176:デフォルトの名無しさん
20/06/18 07:24:19.57 tX12dTLd0.net
ちなみにこれじゃsqlite使う意味ねえじゃんwって思われそうだが、その初回時の検索でlong型のPrimaryKeyであるUniqueIdも取得するんで2回目以降は一つ一つ検索する場合でも普通に早い
タグ以外にもblob型の多少サイズ大きいバイナリとか色々DBには保持させてるんでな
177:デフォルトの名無しさん (ワイーワ2 FF12-HKig)
20/06/18 11:07:27 OoPd9bgDF.net
forで愚直に検索中にディレクトリの状態やDBの状態が変化していなければ良いねω
178:デフォルトの名無しさん
20/06/18 11:27:39.83 8/3vTp6fa.net
SQLiteはトランザクション無いんだっけ?
>>172みたいな自分用のDBで500ms以内に変化するようなクエリって何だろう・・・
179:デフォルトの名無しさん
20/06/18 11:54:40.21 ZcH1+5T10.net
トランザクションいるよな
とってるときも書き込むときも
180:デフォルトの名無しさん
20/06/18 11:58:11.67 JTgDDftK0.net
SQLiteにだってトランザクションあるでしょ
181:デフォルトの名無しさん
20/06/18 11:59:20.73 ZcH1+5T10.net
>>177
あるある
182:デフォルトの名無しさん
20/06/18 12:01:47.66 LpN/zpxZ0.net
SQLiteに限らずmatchならまだしも文字列の=って糞遅いでしょ、トランザクションが有効なのって書き込み時だしね
SQLiteのクエリはutf16版を使ったところで結局はutf8への変換が生じるからC#から使うとオーバーヘッドは避けられない
その上でPRAGMA encoding='UTF-16'とかしてたらまたまたキーワード部分を変換しないといけなくなったりともうめちゃくちゃ
だから一回のクエリで全件持ってきてC#上で検索すればそれくらい早くなるというのはまぁ自然
183:デフォルトの名無しさん
20/06/18 12:03:22.57 8/3vTp6fa.net
ごめんバージョン 2.0から導入されてたね
184:デフォルトの名無しさん
20/06/18 12:35:51.08 u7MaeuvH0.net
ファイルのデータベース管理って言うとWinFSを思い起こすな
185:デフォルトの名無しさん
20/06/18 13:20:40.79 h9R/TQ390.net
トランザクショなるNTFS=TxFとか沼ですな。
※Vistaで導入7から8に変わった時に
デグレした機能w
TransactionalFileMgr
.Net Transactional File Manager がこのスレ
的に正解かな?
186:デフォルトの名無しさん (オッペケ Sr3b-CFTz)
20/06/18 14:45:37 N068eYZUr.net
>>179
検索そのものが遅いんじゃなくて
5000回のクエリ発行と結果受け取りが遅いと予想したが
187:デフォルトの名無しさん
20/06/21 13:35:38.83 jQi52PAy0.net
C#のGUIからパイソンを実行してデータ分析させたいんだけど、
すごく簡単に実現できる方法ってありませんか?
1 C#からテキストファイルでデータ出力
2 C#からPython起動し、テキストファイルのパスを渡す
3 Pythonでデータ分析しグラフ出力
みたいな感じです。
PythonからC#に受け渡すデータはありません。
188:デフォルトの名無しさん
20/06/21 13:42:47.45 bTXo9Nr1M.net
アイロンパイソンでええんちゃう
189:デフォルトの名無しさん
20/06/21 15:46:22.00 7MKh9Chd0.net
コマンドプロンプトのパイソン実行でええんちゃう?
190:デフォルトの名無しさん
20/06/22 22:13:03.58 zuodZOih0.net
batファイルで、解決できそう
191:デフォルトの名無しさん (ワッチョイ 0f01-5fXH)
20/06/24 15:59:14 rxIn+gin0.net
SQL Server Express LocalDBのSQL文の質問なんですが
CREATE DATABASE myDB;
これはちゃんと成功するんですが
CREATE DATABASE IF NOT EXISTS myDB;
こう書くと失敗します
System.Data.SqlClient.SqlException (0x80131904): Incorrect syntax near the keyword 'IF'.
Incorrect syntax near 'myDB'.
このSQL文は使えないんでしょか?かわりの方法はあるでしょか?おねがいします
192:デフォルトの名無しさん (ワッチョイ 3f01-0Hhk)
20/06/24 16:14:51 ZBvJ9IFx0.net
>>188
DROP DATABASE IF EXISTS myDB;
CREATE DATABASE myDB;
193:デフォルトの名無しさん (ワイーワ2 FFbf-qwRG)
20/06/24 16:27:10 6+kkBVmVF.net
DROP すると等価ではないな
194:デフォルトの名無しさん
20/06/24 16:40:01.38 rxIn+gin0.net
>>189
さんくすです、DROPすると以前のデータが消えてしまいそうで
ドロップしたらうまく動くんですが
195:デフォルトの名無しさん
20/06/24 17:06:11.29 ZBvJ9IFx0.net
>>190
おお、そうだね
文法しか気にしてなかった
>>191
CREATE DATABASE文にはIF NOT EXISTSとかのオプションは無いから>>188はエラーになる
DROPはIF EXISTSのオプションが用意されてる
188と等価にしたいならT-SQLのIF-ELSE使って存在チェックして
DBが無い場合にだけ作成すればいい
(存在チェックはDB_IDかsys.databasesを読むか)
IF EXISTS ( … )
…
ELSE
CREATE DATABASE …
196:デフォルトの名無しさん
20/06/24 17:13:36.03 LZQGw3mN0.net
で、それらc#なの?
SQLの話ならスレ違いだ
197:デフォルトの名無しさん (ワッチョイ 8f01-2vNH)
20/06/24 19:42:09 H9m4GMw80.net
DDL文
198:デフォルトの名無しさん
20/06/24 20:43:40.85 rxIn+gin0.net
>>192
さんくすです
> IF NOT EXISTSとかのオプションは無いから
なんと、あったら便利なのにね
IF-ELSEでがんばってみます
>>193
SQL文なので若干すれ違いかなっと
似たようなことがLINQtoSQLでできればとおもったのですが
199:デフォルトの名無しさん
20/06/24 22:59:21.23 G18p0mGY0.net
Entity Frameworkでデータベースと連携したい場合
public class Book{
. public int Id { get;set;}
. public string Title { get; set;}
}
モデルは↑みたいな感じになるけど
実際には↓みたいな感じに色んなデータとふるまいを持ちたいとする
public class Book{
. public int Id { get;set;}
. public string Title { get; set;}
. public List<Picrture> Picture { get;set;}
.
. (以下振る舞い等)
}
この場合って下のデータモデルからから上のDTOに変換してデータベースに入れる(取り出す時は逆)って考え方でいいのかな?
多くのサイトがEntity Frameworkでのデータベースへの突っ込み方しか書いてなくて
実際に運用する場合のデータの持ち方の考え方がよう分からん
この辺りまで詳しい本とかサイトとかあったら教えてください
200:デフォルトの名無しさん
20/06/24 23:58:21.16 KiDLqidP0.net
いいんじゃない?DTOは名前の通りデータをDAOと受け渡すためだけに使って、振る舞い持たせるのは違う気がする。
201:デフォルトの名無しさん
20/06/25 00:07:24.74 pPMcnwWPa.net
単純なアプリだとDomainModelも単純だからEntity、DomainModel、ViewModelを同じインスタンスで済ませられる場合が多い
真面目にやるならそれぞれ別のクラスにしてマッピングするんだけどめんどくさいんだよな
202:デフォルトの名無しさん
20/06/25 00:24:04.27 GAspYPHa0.net
めんどくさいけど、アプリ自体を拡張する可能性があると分けといたほうが後々良いことがあったりなかったり
203:デフォルトの名無しさん (ワッチョイ 0fa7-eW5c)
20/06/25 01:37:48 Q34w5rfS0.net
>>199
やめた方が無難
拡張したい階層が2-3ズレるのはよくあること
たったそれだけなのに拡張のために付けた処理が邪魔になって
本当にやりたい改修が大きな工数になってしまうことはよくあること
204:デフォルトの名無しさん
20/06/25 08:19:30.72 +9vWEdNfr.net
>>200
「ズレる」ようなのは設計と言えないし、そんな設計したことないけどなあ
205:デフォルトの名無しさん
20/06/25 08:48:00.18 Q34w5rfS0.net
>>201
あるやろ?
色んなリストの表示方法(文字着色、並び替え、フォントサイズ個別指定、背景色着色)を実装できるようにしたけど
客の欲しいのはページングのある印刷機能だけだったみたいな
改修にときノリで入れたフォントサイズの変更や文字や背景色がページング印刷時にうまく出ない
→ああ、無いほうが簡単だったな
っとか
206:196
20/06/25 20:33:53.95 42cionTC0.net
ありがとうございます
勉強になりました
207:デフォルトの名無しさん (ワッチョイ 0f87-plLw)
20/06/26 07:51:51 a7mre53d0.net
c#でアクティブウィンドウがosよりも先にキーボード入力を受けとる方法はありますか?
やりたいことはリモートデスクトップを全画面で繋げている場合、Alt+Tabキーの入力は呼び出し元のosではなく、リモートデスクトップ側が取得しているように見えます。
この挙動を自作のguiでもできればと考えています。
「アクティブウィンドウがosよりも先にキーボード入力を受けとる」の認識が間違っているかも知れませんが、リモートデスクトップのような挙動を実現する方法を教えてください。
208:デフォルトの名無しさん (ワッチョイ 8f01-2vNH)
20/06/26 08:39:13 EHOqkK/F0.net
グローバルフックしか無いと思うな
SetWindowsHookEx を調べてみなされ
209:デフォルトの名無しさん
20/06/26 09:07:56.65 wYfFflLL0.net
>>204
余計なお世話かもしれないけど、アプリの枠の外にあるOS側での共通の操作を、1アプリの都合で勝手にフックされて違う動作になるのは使う方からするとストレスになるから気を付けた方がいいかも。
リモートデスクトップはある意味OS内OSだし、そういう例外的なケースならばアリだと思うけど。
210:デフォルトの名無しさん
20/06/26 09:43:44.08 an36r83ud.net
>205
ありがとうございます。調べてみます。
>206
今回は自分で使いたいものなんで。
将来的に業務で使う機会があれば考慮するようにします。ありがとうございます。
211:デフォルトの名無しさん
20/06/26 13:15:51.31 PjbtVFt+F.net
キーロガー禁止
212:デフォルトの名無しさん
20/06/26 20:47:00.03 EHOqkK/F0.net
Tik Tokの完全再現をw
213:デフォルトの名無しさん
20/07/01 15:49:13.62 BmoMMcjv0.net
20年ぐらい前からプログラミングやりたいと思い続けてきた文系おじさんだけど
数年前から少しずつ勉強し始めて、
やっとのことでちょっとしたものをC#で作れるようになってきた
おもしろいわぁ
214:デフォルトの名無しさん
20/07/02 08:48:04.62 +yIU1z+T0.net
URLリンク(freesoft-100.com)
色温度をいじれる言語ってなんでしょうか?
pythonを主に使用しているのですが、C#系でないと色温度はいじれませんか?
色温度にもモニタ側、gpu側があると思います。
215:デフォルトの名無しさん
20/07/02 09:03:57.94 unw3xiWi0.net
>>211
詳しくないから間違ってるかもしれないが、そのアプリ単体ではなく他のアプリも含めて画面の色温度を変えるという機能なら、OSがそういうAPIを提供しているということかな。それならそのAPIを利用できる言語ならばC#に限らずなんでもいいと思うけど。
216:デフォルトの名無しさん
20/07/02 09:04:49.65 iSJIUTiv0.net
>>211
スレ違いだからpythonのスレで聞くかそれのソース自分で理解してほしんだが
C#でできるのはWINAPIをラップした.NETの機能を使うか直にDLLのAPIを呼び出すかくらいなんだから
pythonでAPI使えるのなら同じことができるはず
217:デフォルトの名無しさん
20/07/02 09:51:08.11 +yIU1z+T0.net
ありがとう
c#にはそういうクラスがあるみたい
winのソフト作るにはc#が一番都合がいいよね
218:デフォルトの名無しさん
20/07/02 11:09:32.81 esHBKAii0.net
質問です
DateTime.Now.ToString(@"yyyy\MM\dd") => 2020\07\02 を期待したいのですが 2020M7d2 になります
今は \\ を別な文字に置換し変換後また置換ってやってますがよい方法あれば教えてください
219:デフォルトの名無しさん
20/07/02 11:15:16.64 j3S5Aqle0.net
>>215
@"yyyy\\MM\\dd"
220:デフォルトの名無しさん (ワッチョイ 8749-OmMV)
20/07/02 11:26:03 SFSsBsHn0.net
そこに\マーク入れる文化ってどういうものなの
221:デフォルトの名無しさん (ワッチョイ 638c-VQSO)
20/07/02 11:31:04 xozoa+r10.net
日付にバックスラッシュ…?
222:215
20/07/02 11:41:12.70 esHBKAii0.net
>>216
なるほど、できました
しかし元の文字列は \ 一文字で決まっているのでどのみち何か手を加えないとならないですね
>>217-218
フォルダ名の生成で日付を含めた任意の書式を扱えるようにするためなのです
223:デフォルトの名無しさん
20/07/02 12:25:41.08 frMfUtj7r.net
あー「ファイルパスを作成するとき、年月日ごとのフォルダ階層をつくるため」ってことね
年の中に月だけの名前のフォルダとかセンス的に俺はようやらんけど、理由は理解できたわ
224:デフォルトの名無しさん
20/07/02 12:43:20.68 ZEZ39nL50.net
>>215
年月日をそれぞれ別に取得したほうがいいんじゃね
必要ならそれをPath.Combineで連結すれ
225:デフォルトの名無しさん (エムゾネ FFaa-JCxG)
20/07/02 17:00:29 ryu4JvV+F.net
/でも造れるやろ
226:デフォルトの名無しさん
20/08/01 16:52:28.79 aC56TYwwM.net
VisualStudioは糞です。
{}を使うとき
public voidnicemethod
{
}
となるのではなく
public void nicemethod{
}
と自動でなるようにするにはどうしたらいいですか?
227:デフォルトの名無しさん
20/08/01 16:54:09.31 G+VYcIGl0.net
糞
228:デフォルトの名無しさん
20/08/01 16:58:48.08 GNM8CN2Y0.net
>>223
オプションから起動時の設定変更出来るよ
昔は後者のほうが行数少なくて済むから良いと思っていたけど、最近は前者でも別に良いわと
229:デフォルトの名無しさん
20/08/01 17:01:00.07 8QGIO3XO0.net
縦長ディスプレイなら良いんじゃね
230:デフォルトの名無しさん
20/08/01 17:57:59.23 E5+XpSzKd.net
整形はvsのデフォルトに任せるようにした
独自整形ルール作ってるプロジェクトに入るとめんどくせって思うようになってしまった
231:デフォルトの名無しさん
20/08/01 18:15:37.32 8AkvqbAqa.net
同じ構文木なら表示形式はなんでもいいはずだ
保存時の形式だけ標準化して、編集時はユーザーの好みに合わせてフォーマットするようにIDEが進化すべき
232:デフォルトの名無しさん
20/08/01 18:23:48.50 dl6F83GvM.net
簡単な住所録作ろうとしてます。
登録と削除と追加ができればいいだけのやつ。データ保存はデータベース側に。
これのシンプルなオープンソースプロジェクト知っている方いませんか?いたら嬉しい。
233:デフォルトの名無しさん
20/08/01 18:48:40.23 Yannm6rz0.net
>>229
オープンソースプロジェクトの何を探してんの?
データベース?
234:デフォルトの名無しさん (ワッチョイ 4dde-akQC)
20/08/01 19:19:48 1LAdFvqL0.net
>>230
住所録って書いてんじゃんメクラかよ
235:デフォルトの名無しさん
20/08/01 19:31:35.20 Yannm6rz0.net
>>231
作るのにオープンソースプロジェクトが必要なの?
って言ってるんだけど。
作るんじゃなくて流用する、の間違いなら、ああ、って思うけどさ。
236:デフォルトの名無しさん
20/08/01 19:43:37.72 EiwM5rD/0.net
まあ、そのまんま使えねーだろーから改修して使おうってんじゃねーの?
オープンソースの正しい使い方やん
237:デフォルトの名無しさん
20/08/01 20:12:27.90 Yannm6rz0.net
簡単な登録と削除ができるだけでいい住所録にそんなものが必要だとは思わんというか、
何かをカスタマイズしてその程度の住所録にするのは、ちょっとたいそうな気がする。
238:デフォルトの名無しさん (ワッチョイ 7a6a-xE3T)
20/08/01 20:49:12 oCALSNxU0.net
エスパーすると作りたいけど右も左も分からんからお手本が欲しいってことかな
239:デフォルトの名無しさん (ワッチョイ b178-xE3T)
20/08/01 20:51:54 xhSYh2050.net
>>229
URLリンク(www.google.com) Address book
240:デフォルトの名無しさん
20/08/01 21:48:16.20 NKcPOHZ30.net
オープンソースってちょいっと触るには佇まいがでかすぎて流用には向かないことが多い
住所録のどこの部分の機能が必要か知らんけど
単にアドレス帳の登録、削除、編集の基本機能だけだったら1~2日の内容だから
どっか入門サイトで似たようなの見つけて実装したほうが早いと思う
241:デフォルトの名無しさん
20/08/01 21:52:38.29 +9Q20FKV0.net
スレ違いだったら申し訳ないです。
C言語をやろうととりあえずmacかったのですが、
どのソフトで開発環境作ったらいいでしょうか?
242:デフォルトの名無しさん
20/08/01 21:54:22.30 G+VYcIGl0.net
>>238
ここCじゃなくてC#な
243:デフォルトの名無しさん
20/08/01 22:04:49.38 8QGIO3XO0.net
>>238
もう一つ言っておくと、mac はobjective c
(c++)でないと
画面作れないよ
244:蟻人間
20/08/01 22:06:32.74 LLVAByzud.net
macは自由陣営じゃないから。。。
245:デフォルトの名無しさん
20/08/01 22:11:32.98 +9Q20FKV0.net
わかりました
ありがとうございます
246:デフォルトの名無しさん
20/08/02 06:10:11.27 T2MIboAU0.net
c#で作ったbotからandoroidスマホに通知を送る良い方法はありませんか?
履歴を確認できる方法で。
今まではline-notifyでlineに送っていたのですが、新しいルート証明書をインストールしなくてはならなくなって別の方法を探しています。
247:デフォルトの名無しさん
20/08/02 07:27:09.21 EizALxAu0.net
>>243
相手が端末の電源オフのときはどうしたいの?
サーバーの特定のデータを見に行く作りにしないと結局使えないじゃんってなることのが多かったよ
248:デフォルトの名無しさん
20/08/02 12:52:22.51 scrCUlqp0.net
データクラスって一時期C#にも付くんじゃないかって言われてたのに、一体どうなったの?
URLリンク(try.kotlinlang.org)
オートプロパティのおかげでJavaみたくはならないから要らないってこと?
249:デフォルトの名無しさん
20/08/02 13:54:59.45 xaz7GC4v0.net
9でrecordくるよ
250:デフォルトの名無しさん
20/08/02 14:51:37.50 umITGI3r0.net
URLリンク(ufcpp.net)
URLリンク(ufcpp.net)
recordsはこんな感じ
251:デフォルトの名無しさん
20/08/02 16:20:00.33 NsDY9jGSF.net
ここはプログラムを描きたい人造りたい人向けのスレ
フリーソフトダウンロードして使いたい人は相応のスレへ逝くことをお薦めします
252:デフォルトの名無しさん
20/09/03 22:01:35.41 RMVHFRAl0.net
public interface Ixxxxx
{
int method1(int x);
}
インターフェイスについて質問です。
上ではメソッドの型を定義しているわけですが、
インターフェースの引数定義で、xのように変数を設定するのはどうしてなんでしょうか。
ここでは使われない変数なので、型のみで良いと思うのですが。
それから、publicを省略して、interfaceとだけ定義する理由はどうしてなのでしょうか。
classなら、publicを前置するのに。
253:デフォルトの名無しさん
20/09/03 22:10:50.18 RMVHFRAl0.net
ルート相対的URLを保存するクラスは何が適しているんでしょうか。
String型に、/root/abc/def を文字列として保存しているのですが、
適切な型があれば教えてください。
254:デフォルトの名無しさん
20/09/03 23:38:56.88 FEiIVBqsM.net
>>249
名前がないと何を意味する引数なのかが意味不明だから
interfaceはpublicメンバしか持てないから
255:デフォルトの名無しさん
20/09/04 00:15:18.15 yQcUkcYq0.net
引数名ないとドキュメント化する時にも困るしね
256:デフォルトの名無しさん
20/09/04 11:28:01.48 M8Oq5rfA0.net
>>249
引数や戻り値の型をしっかり定義しないといけない理由は、ILやアセンブリといった低レベル知識を学習すればよく分かるよ
機械語レベルだとint、long、float、double~etcはそれぞれ命令文が違う
だから引数や戻り値がバラバラな値型だとそれぞれの機械語を生成しなきゃならず共用化出来ない
逆に言うと参照型であればポインタだけで済むので実は共用化が出来る
なので参照型であればobjectとして定義をすれば実際に共用化可能(値型もboxingしてobject型にすれば同様)
257:デフォルトの名無しさん
20/09/04 11:39:06.89 krKESdlN0.net
型のみで十分なのになん変数名まで書かなきゃならんの?って質問にその回答は適切ですか?
258:デフォルトの名無しさん
20/09/04 12:06:19.79 yQcUkcYq0.net
>>253
その回答はズレてる
259:デフォルトの名無しさん
20/09/04 12:46:23.59 YyY7xdI50.net
>>251
>>252
レスありがとうございます。
なるほど、
変数名に引数の役割について記録しておくということにとても納得しました。
ソースの自己ドキュメント化につながりますものね。
>>253-255
レスありがとうございます。(^-^)
260:デフォルトの名無しさん
20/09/04 13:31:45.96 Cdgw0eXGM.net
インターフェイスメンバに引数名が必要なのは名前付き引数のためでもある
名前付き引数ってのはmethod1(x:123)みたいな書き方のこと
正確には名前付き引数がC#に導入されたのは比較的最近なので時系列が逆なんだけど、
.NETはC#に限らずいろんな言語を動かすことを想定して設計されてるので名前付き引数のための要請についても元々考慮されてたというわけ
261:デフォルトの名無しさん
20/09/04 14:23:19.04 Utz5OTUqa.net
>>257
下のコードは合法なのでさすがにそれは意味不明
interface IHoge
{
void Fuga(int x);
}
class Hoge : IHoge
{
public void Fuga(int y)
{
}
}
262:デフォルトの名無しさん
20/09/04 14:29:57.19 G2vvVEFn0.net
引数名を変更するのってどういったケースを想定してるん?
263:デフォルトの名無しさん
20/09/04 14:34:15.41 Utz5OTUqa.net
別に想定なんかしてないのでは?
単に違法にする理由がないだけかと
264:デフォルトの名無しさん
20/09/04 17:36:23.03 nh9T8LFU0.net
>>258
IHoge hoge = new Hoge();
hoge.Fuga(x: 100); //<= OK
hoge.Fuga(y: 100); //<= NG: compile error
265:デフォルトの名無しさん
20/09/04 18:29:28.50 Utz5OTUqa.net
>>261
当たり前やんw
266:デフォルトの名無しさん
20/09/04 19:19:04.36 Utz5OTUqa.net
あーインターフェイスのメソッドの仮引数が名無し定義を許す仕様になってたら
名前付きで呼び出せないよって言いたいわけか
確かにその通りだね。
だけど「名無し定義を許さない理由の一つは名前付き引数を想定していたから」は考えすぎじゃないのかな
267:デフォルトの名無しさん (テテンテンテン MM8f-wKT+)
20/09/04 19:51:37 Cdgw0eXGM.net
いや名前付き引数はVB.NETには昔からあったぞ
想定していないわけがない
268:デフォルトの名無しさん
20/09/04 20:31:43.96 nqNO8CQ40.net
そもそもコンパイルしても変数名はILに残るわけだし
C#1からたぶんそうだよね?reflectionあるんだし
269:デフォルトの名無しさん (アウアウウー Sa8b-wKT+)
20/09/05 10:58:29 JiWof8twa.net
>>265
それはもちろんその通りで、名前付き引数も当然そのメタ情報を見るわけだけど、
MSが仮に明確な意思をもってインターフェイスメンバに引数名は絶対要らないという設計判断をしたならCLIもインターフェイスメンバには例外的に引数名を持てない仕様にしただろう
CLIの設計としてはわざわざそんな例外を設けるのは不自然だし、C#の言語仕様を考えてもインターフェイスメンバだけ例外的にメソッド宣言の文法が違うのは不自然だ
もちろん、実装には追加コストを払って特別なケアが必要になるだろう
そこまでして引数名を省略したいだろうか?ということだね
270:デフォルトの名無しさん
20/09/05 12:34:52.95 Waja5Z+Na.net
実行時に小さくないコストが発生するような方法なんて取るわけないと思うよw
メタ情報なんて見てるわけないじゃんwww
271:デフォルトの名無しさん
20/09/05 13:22:53.11 azagYl6mp.net
家政婦はメタ
272:デフォルトの名無しさん
20/09/05 13:51:42.86 6OTXYwA0M.net
>>267
誰が実行時に見てるなんて言ったんだ?
見てるのはコンパイル時
273:デフォルトの名無しさん
20/09/05 14:12:24.58 RVsSclOOM.net
2日連続して秒で論破されとるやつw
274:デフォルトの名無しさん
20/09/05 16:47:07.35 aivXeFh8d.net
>>270
スレタイの通り初心者なんやろ
275:デフォルトの名無しさん
20/09/05 18:29:01.06 Waja5Z+Na.net
>>266は誤読したけど前日に論破(笑)なんかされた覚えはないよw
言い訳をさせてもらえばそもそも>>265-266は話の意図が不明瞭。
どっからそんな話が出てくる
276:のって話
277:デフォルトの名無しさん
20/09/05 22:38:11.37 VnlHSptc0.net
インターフェースの引数名を省略する戦略なんかないって結論出てるのにね
278:デフォルトの名無しさん
20/09/06 08:18:43.19 gGwX7R3F0.net
>>273
そこの理由が示されていないんでは?
名前付き引数を使えるようにしたんで仮引数は省略できません、じゃ理由になってないでしょ?
279:デフォルトの名無しさん
20/09/06 14:33:55.32 pKWvrGW4F.net
省略するとき
hoge(hage,,,,,fuga,,,,kuzu,,,) みたいな言語あったなー
280:デフォルトの名無しさん
20/09/07 02:57:30.38 u0REhpNo0.net
using var task = Task.Run(() => Do(a, b, c));
このDoを途中で止めることできる?
Doの処理に時間がかかるためキャンセルさせたい場合がある
281:デフォルトの名無しさん
20/09/07 03:10:56.80 3uGG3SyO0.net
CancellationTokenを使う
URLリンク(docs.microsoft.com)
282:デフォルトの名無しさん
20/09/07 03:25:16.17 jjIciKyq0.net
Doがキャンセルできるように作られてればできる
そうでなければ無理
283:デフォルトの名無しさん
20/09/07 09:29:51.53 s6/MEWpq0.net
a,b,cってなによ?
284:デフォルトの名無しさん
20/09/07 10:42:48.10 Mci5uexUM.net
引数じゃないの?
285:デフォルトの名無しさん
20/09/07 16:30:38.13 u0REhpNo0.net
Doの改造も不可避みたいですね
ありがとうございました
286:デフォルトの名無しさん
20/09/08 11:07:55.61 zCzZAqaJv
C#歴1ヶ月の独学勉強中の者です。
pictureBoxに画像を表示させており、
ボタンを押下するとその画像が画像中心を支点に5度ずつ
反時計回りに回転するプログラムを作成しています。
環境:VScommunity2019
この際pictureBoxに表示させている画像が表示されたまま
その上に回転した画像も表示されてしまいます。
元の画像を表示させないようにしたいのですが、
対応案が浮かびません。。ご教示いただけないでしょうか。
287:デフォルトの名無しさん
20/09/11 09:13:51.86 rDZLwTxXa.net
VisualC#2019パーフェクトマスター
買ってみた
800ページ近くある
勉強しなおし
Java有償化で、いろいろ特需だな
Javaよサラバ
Javaよサラバ
Why なぜに生きているのか
わからない
288:デフォルトの名無しさん
20/09/11 10:05:52.91 qxFjIo0zM.net
Java有償本当か?
289:デフォルトの名無しさん
20/09/11 16:12:44.77 rDZLwTxXa.net
優勝だ
290:デフォルトの名無しさん
20/09/23 09:34:34.80 hJkRvCZvF.net
>>1
Part 149
291:デフォルトの名無しさん
20/09/23 19:49:30.91 SeN5l4G8a.net
需要ないと思うけど暇だったので別スレで質問が出てたキー操作のシーケンスで発動する
キーボドショートカットを作ってみた
URLリンク(ideone.com)
使い方:
public partial class Form1 : Form
{
private KeyboardShortcutsDetector mKbsDetector = new KeyboardShortcutsDetector();
public Form1()
{
InitializeComponent();
mKbsDetector.AddKeyBinding(Keys.Control | Keys.K, Keys.Control | Keys.L, () => Console.WriteLine("Ctrl + K, L"));
mKbsDetector.AddKeyBinding(Keys.Control | Keys.K, Keys.Control | Keys.M, () => Console.WriteLine("Ctrl + K, M"));
mKbsDetector.AddKeyBinding(Keys.Control | Keys.J, Keys.Control | Keys.U, () => Console.WriteLine("Ctrl + J, U"));
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
return mKbsDetector.ProcessKey(keyData) ? true : base.ProcessCmdKey(ref msg, keyData);
}
}
退屈なコードだからたぶん見るだけ時間の無駄だと思うw
292:デフォルトの名無しさん
20/09/24 00:24:56.04 GbsAQP4b0.net
MVCとかまだイマイチわからんからwinformで作ってからMVCに移行する感じで勉強してるけど一人開発だと有り難み感じないからちょっと空しい
293:デフォルトの名無しさん
20/09/24 12:42:20.92 gbWGo5W3M.net
ボタン押したあとに結果リストにフォーカス移動させるのは
viewでやってええのか?
294:デフォルトの名無しさん
20/09/24 16:36:22.54 e+Ck+96a0.net
いいと思うよ
295:デフォルトの名無しさん
20/09/26 17:13:06.01 xSRIB2Tf0.net
windowsフォームアプリでHttpClientを使ってhtmlを取得しようと思っていますがうまくいきません。ステップ実行すると※の部分で処理が終わってしまいます。エラーに関する表示が何もでないため行き詰まってます。非同期処理に関する理解が浅いからだと思っていますが、壁を乗り越えられません。
このようなコードではなぜうまくいかないのでしょうか?
①
private void button1_Click(object sender, EventArgs e)
{
var url = "URLリンク(www.google.com";)
var t = GetHtml(url);
t.Wait();
this.textBox1.Text = t.Result;
}
async Task<string> GetHtml(string url)
{
var client = new HttpClient();
var html = await client.GetStringAsync(url);//←※
return html;
}
(続く)
296:デフォルトの名無しさん
20/09/26 17:13:28.26 xSRIB2Tf0.net
>>291の続き
ためしにコンソールアプリで似たコードを書いてみましたがうまくいきます。
②
static void Main(string[] args)
{
var url = "URLリンク(www.google.com";)<)
var client = new HttpClient();
var html = await client.GetStringAsync(url);
this.textBox1.Text = html;
}
297:デフォルトの名無しさん
20/09/26 17:23:29.59 RSACZQL60.net
>>291
private async void button1_Click( object sender, EventArgs e )
{
var url = "URLリンク(www.google.com";)
this.textBox1.Text = await GetHtml( url );
}
298:デフォルトの名無しさん
20/09/26 17:27:53.86 9d7CJAWD0.net
asyncはwaitしちゃだめ
理由は async デッドロック あたりでググって
299:デフォルトの名無しさん
20/09/26 17:31:36.79 +0bWtyAMM.net
>>291
どうしてもWait()使う場合はConfigureAwait(false)するかな
300:デフォルトの名無しさん
20/09/26 17:36:48.45 xSRIB2Tf0.net
>>293,294,295
数日間悩んでたのですが、教えて下さったキーワードを手がかりに調べ直してみます
本当に助かりました。ありがとうございます。
301:デフォルトの名無しさん
20/09/27 04:46:18.27 6sIZ9RBB0.net
Android, Electron などは、スレッドが2つある。
UI(描画)スレッドと、サーバー(バックグラウンド)スレッド
だから、2つのコンテキスト・文脈をまたがって、非同期などはできない。
異なる文脈の処理を呼び出すには、文脈を切り替えるような、特別な書き方がある
まあ、Windows のGUIアプリが、2つの文脈でやっているかどうかは知らないけど
302:デフォルトの名無しさん
20/09/27 07:46:38.96 WpoxB1nK0.net
>>297
知らんのかよ。
やってるけど。
303:デフォルトの名無しさん
20/09/27 16:39:54.69 BMd/NSoW0.net
>>291
多分非同期処理って調べるとasyncの例ばかりで自分で戻り制御する方法がよく
分からなくてTaskクラスでWaitすれば出来るとかって結論に達したんでないかと
思うのだけど・・・
まず、async指定されたメソッドは呼び出されるとメソッド全体を別スレッドとして
起動して処理を元のスレッド(この場合STAスレッド)に戻します
asyncメソッドの中でawaitを指定すると、メソッドの内容に関係なく元のスレッドに
戻るのは変わらないですが、asyncメソッドの中でawaitで指定されたメソッドが
終了するまでasyncメソッドのスレッドだけが待ち状態になり、awaitから返って
くるとawait以降を実行しasyncメソッドの最後まで行くとasyncメソッドのスレッド
だけが終了されます
検証してないので予想なのですが、Taskクラスで管理するスレッドを起動して
いない(Task.Run)状態でWaitをかけるとSTAスレッドを待つためにsleepして
しまいますがSTAスレッドはループスレッドなので当然いつまで待っても終了
しません
asyncスレッドではawaitの処理が終わって復帰しようとしても元になるSTA
スレッドがsleep状態なので、こちらもawaitから返ってこないみたいなことが
起こっているのだと思います
2のコンソールアプリの場合にはループスレッドではないのでMainの処理が
終了した時点で続きが動くのではないかと
3は正しい使い方で、STAスレッドは動かしたままbutton1_Clickメソッドが別スレッドで
動作する際にclient.GetStringAsyncの処理を待っているので普通に動作します
button1_Clickの中で待つのであればasyncメソッドを作る意味がないですし、async
メソッドで裏で動かすのであればbutton1_Clickで待ってはいけないので3の様な
形で実装するか、asyncメソッドの返却値をただのstringにして、textBox1.Textに
メソッドの返却値が入る形式に変える(こっちは試してないので嘘かも)のが正解じゃ
ないかな
304:デフォルトの名無しさん
20/09/27 18:04:42.91 co99WLAO0.net
つまり非同期すればハゲるということですね。
305:デフォルトの名無しさん
20/09/27 19:27:47.55 0F2CG6otd.net
>>291
①でやるなら自分はcontinuewithするかなあ
あとhttpclientは毎回使い回すのはあまり良くなかった気がする
306:デフォルトの名無しさん
20/09/27 19:28:51.84 0F2CG6otd.net
>>301
x使い回す
○作り直す
307:296
20/09/28 02:24:40.60 QIpyCS2B0.net
JavaScript が難しいのは、非同期が基本だから。
コンテキスト・文脈が異なる。
時間の進み方が異なる世界で、同期を取らないといけないから
Ruby が簡単なのは、同期が基本だから。
非同期の方がオプション
Android, Electron がややこしいのも、2つの文脈の同期を取る必要があるから。
1つのアプリ内に、GUI・非GUI の文脈がある
例えば、Electronなら、Main は、Node.js のCUI スレッドで、
Renderer は、GUI のChromium スレッド
双方は、決められた書き方をしないと、同期・通信できない
308:デフォルトの名無しさん
20/09/28 06:18:20.07 ii9XSMYC0.net
>>291です
>>297
コンテキスト・文脈という概念がまだ把握できてないのでそこが課題だと思ってます
>>299
自分は独習C#という本をテキストにして勉強しています。
その中で、>>292の②と似たコードが記載されていて、
これを使ってasync/awaitの基礎が説明されています。
そこで、フォームアプリで真似してみたんです。
デッドロックについてはいろいろ調べてみて基本的な理屈は理解できました。
ただ、②のコンソールアプリでデッドロックが起きない理由がわかりません。
コンソールアプリはループスレッドではないからとのご指摘が重要だと思っていますが
まだ理解が浅くてモヤモヤしてます。
あと、
>まず、async指定されたメソッドは呼び出されるとメソッド全体を別スレッドとして
起動して・・・
の下りですが、スレッドが3つあると考えればいいのでしょうか?
a.STAスレッド(2のスレッドを呼び出したスレッド)
b.async指定されたメソッドを処理するスレッド
c.client.GetStringAsync(url)を処理するスレッド
これは②のコンソールアプリでも同じですか?
bについては独習C#には書かれていなかったので
aとbは同じスレッドだと思い込んでいました。
調べてみてよく分かったのですが、理解できていない概念が多すぎますね。
今の時点で安易に触ってしまうと変に誤った先入観を持ってしまいそうです
この辺をわかりやすくしっかり説明している書籍等、ご存じないでしょうか?
結論としては
基本的にフォームアプリの中でWaitを使うな
使いたいならConfigureAwait(false)で回避しろ
ということなのかなと思っています
309:デフォルトの名無しさん
20/09/28 07:01:50.95 ii9XSMYC0.net
>>304
修正
a.STAスレッド(bのスレッドを呼び出したスレッド)
310:デフォルトの名無しさん
20/09/28 07:59:26.50 nO4ceNb30.net
すいません入門書に以下のコードがあるんですが実行してもピクチャーが真っ白で変になってるんですが
何が間違ってるんでしょうか;
URLリンク(gyazo.com)
画像を置いてる場所はここです
URLリンク(gyazo.com)
311:デフォルトの名無しさん
20/09/28 08:35:58.50 lkQsRi/q0.net
表示したい画像はどんな内容なんですか?
312:296
20/09/28 08:52:18.25 QIpyCS2B0.net
>>304
コンテキスト・文脈が異なるとは、全く別世界・異次元。
時間の進み方も異なるし、全く感知できない。
通信・同期もできない
未定義の動作と同じ。
あらゆる仮定・推測ができない
だから、双方が連絡するには、特別な書き方をしないといけない
普通の言語では、例外も補足できない。
他方で例外を投げても、伝わらない
だから、ストールするのは、文脈が異なる場所で、例外が起こっている可能性もある。
313:起こっていても分からないから 本を買うよりも、検索して調べた方がよい。 こういう説明が載ってる本は、まずない。 余程、マニアックな本だけだろう
314:デフォルトの名無しさん
20/09/28 08:53:38.64 phqY8Xtx0.net
FormのControlsに追加しなくてもいいんだっけ?
315:デフォルトの名無しさん
20/09/28 08:59:13.21 Zg0P7tB00.net
>>304
C#による マルチコアのための非同期/並列処理プログラミング
URLリンク(gihyo.jp)
C#によるWindowsシステムプログラミング 第2版
URLリンク(www.cutt.co.jp)
この2冊しかしらん
もっといいのを知ってる人いたらよろしく
316:296
20/09/28 09:04:53.56 QIpyCS2B0.net
確かに、GUI の根幹には、永久のイベント(メッセージ)ループがある。
イベントドリブン
ずっと、ユーザーからのマウスイベントなどが、キューに入るのを待っている。
キューにイベントが入ると、それを処理する。
それを永久に続ける
一方、CUI では、そういうイベントドリブンは聞かない。
マウス操作で、何かをするというのも聞かない。
Ctrl + C を押して、割り込み処理を発生させることはできるが
でも、こういうアプリの終了などのソフトウェア割り込みも、イベントループで拾うけど
317:296
20/09/28 09:08:06.54 QIpyCS2B0.net
そんな難しい本を読んでも、理解できないから無駄だと思う
検索した方がよい
318:デフォルトの名無しさん
20/09/28 09:11:10.60 Zg0P7tB00.net
>>306
用意した画像の一部だけが表示されている
たとえば、
pb.SizeMode = PictureBoxSizeMode.StretchImage;
といった感じでPictureBoxSizeModeを指定してみると何が起こってるのか何となくわかるんじゃね?
319:デフォルトの名無しさん
20/09/28 09:42:36.85 Uql71HHWa.net
>>311
ctl+Cまで入力コマンドを待つCUIアプリはイベントドリブンと呼べるのでは?
320:デフォルトの名無しさん
20/09/28 09:50:37.80 o994bwz+0.net
>>311
CUIでもターミナルベースの業務アプリなんかだとイベントループ書くぞ。
321:296
20/09/28 10:20:17.53 QIpyCS2B0.net
結局、GUI・CUI も、どちらもイベントドリブンなのか
大部分は同じなのかも
322:デフォルトの名無しさん
20/09/28 10:59:03.73 o994bwz+0.net
>>316
お前Electronの内容もちょっと変な理解してるし、毎回思うけど知ったかぶりしないほうがいいぞ。
結局Rubyの事しかわかんないんでしょ。
323:デフォルトの名無しさん
20/09/28 11:27:34.04 j++FlVxl0.net
Delphiに存在したメタクラス型(クラス型を代入、参照できる変数)は
C#に無いの?
324:デフォルトの名無しさん
20/09/28 11:42:34.18 ii9XSMYC0.net
>>310
ありがとうございます
アマゾンレビューをチラ見したところ目的に合ってそうです
>>312
とりあえず頑張ってみます
325:デフォルトの名無しさん
20/09/28 11:53:52.45 phqY8Xtx0.net
>>318
Typeは?
326:デフォルトの名無しさん
20/09/28 13:53:50.99 j++FlVxl0.net
Typeでもある程度事は足りるけど、
あらゆる型のtypeof()を代入できるので不確実だし、Activatorとか必要で面倒。
無いなら仕方ないが…まあ移植が大変
327:デフォルトの名無しさん
20/09/28 18:57:37.61 nO4ceNb30.net
>>313
そのプロパティ?はまだ本内で教わってないですが使ったら表示されました。
ありがとうございます!!
328:デフォルトの名無しさん
20/09/28 22:54:29.00 iemn9XLz0.net
>>311
CUIなRTOSなんて普通にあるけどなぁ
329:デフォルトの名無しさん
20/10/10 10:58:06.91 RvE6O+PE0.net
.NET Coreでコンソール画面に
「こんにちは、WORLD!」と表示させようとすると
なぜか「こんにちは、WORL!」のように表示されます
コンソール画面のメニューからフォントを変更すると正しく表示されますが原因が分かりません
330:デフォルトの名無しさん
20/10/10 11:22:49.95 OZkIKLkD0.net
コンソール画面とは?
331:デフォルトの名無しさん
20/10/10 12:42:00.94 YPdRC9Oi0.net
>>324
コード貼れ
332:デフォルトの名無しさん
20/10/10 13:17:16.07 RvE6O+PE0.net
static void Main(string[] args)
{
var str = "こんにちは、WORLD!";
Console.WriteLine("{0}", str);
Console.ReadKey();
}
333:デフォルトの名無しさん
20/10/10 17:53:06.91 wYCx593I0.net
>>327
これかな?
URLリンク(aquasoftware.net)
334:デフォルトの名無しさん
20/10/10 17:57:00.27 wYCx593I0.net
>>327
これも
URLリンク(csharp.clock-up.jp)
335:323 326
20/10/10 19:40:42.12 RvE6O+PE0.net
>>328 >> 328
試してみましたが改善しません
出力をコピーしてメモ帳にペーストしてみると正常なので
どうも文字化けではないようです
文字の表示位置がずれて重なっているような感じです
336:デフォルトの名無しさん
20/10/10 20:03:24.77 wYCx593I0.net
>>330
こちらでは正常なんでコンソール画面のプロパティの設定がおかしいんでは?
337:蟻人間
20/10/10 20:04:01.51 c6WyhNHPd.net
何てフォント?
338:デフォルトの名無しさん
20/10/10 20:23:39.28 RvE6O+PE0.net
MSゴシックの18ポイント、Windows8.1です
来週会社のパソコンで試してみることにします
339:デフォルトの名無しさん
20/10/10 20:41:27.03 wYCx593I0.net
>>333
8.1はプロパティでレガシーコンソールのチェックある?あったらそれチェックでいけるんでは?
340:デフォルトの名無しさん
20/10/10 20:52:24.98 RvE6O+PE0.net
ないです
341:デフォルトの名無しさん
20/10/10 21:17:43.96 RlZbVDXEa.net
何にもアドバイスできないのに恐縮だけど、
>コンソール画面のメニューからフォントを変更すると正しく表示されますが
だったら具体的にどのフォントで問題が発生してどのフォントで発生しないか
確認した範囲で書いた方がいいのでは
あと、普通テキスト変えていろいろ試さないか?
342:デフォルトの名無しさん
20/10/10 21:50:46.82 wYCx593I0.net
他のアプリでMSゴシックの18ポイント使ってみ。フォントのファイルが正常かどうか
使えるなら8.1のコンソールウィンドウの問題でしょ
343:デフォルトの名無しさん
20/10/10 23:23:35.42 wgBcrtZd0.net
>>321
Typeで事足りそうなものだが…
あるいは設計の問題かも。
どんな設計なのかも書き込んでみたら?
344:デフォルトの名無しさん
20/10/20 10:49:57.27 N2Y7+9Dy0.net
ローカルでiTextSharpを利用して、
Json形式のデータからPDF帳票を作る・・てのつくったんだが、
(サーバ上で、APIコールとかファイル読込でPDFファイルを返したかった。
イメージ的にはページごとにTextとかLineを指定したJsonデータ)
いざ業務に転用できるかなってフェーズにきて
iTextSharpのライセンス(AGPL)がやだなあ、って思ってる。
PDFSharpは日本語がなんかうまくいかない。
今のC#で、PDFを作るの、皆さんはどうやってる?
345:デフォルトの名無しさん
20/10/20 10:55:16.27 0/xBmjm30.net
>>339
業務だったらExcelCreator使ってる
346:デフォルトの名無しさん
20/10/20 10:59:00.80 pHiz9StDF.net
PDFSharp使ってるけど問題無し
347:デフォルトの名無しさん
20/10/20 11:10:22.94 d69BLAaZa.net
React、Vueで帳票レンダリング
ヘッドレスブラウザでPDF印刷
348:デフォルトの名無しさん
20/10/20 11:13:59.21 pHiz9StDF.net
日本語不安ならグラフィック直接PDFに張り付けろ
349:デフォルトの名無しさん
20/10/20 12:28:25.89 eHl8PxCr0.net
PDFSharpは日本語の折り返しに対応してなかったぞ。
350:デフォルトの名無しさん
20/10/20 12:50:06.87 pHiz9StDF.net
>Json形式のデータからPDF帳票を作る
これが折り返しするかどうかだな
351:デフォルトの名無しさん
20/10/20 13:46:22.13 N2Y7+9Dy0.net
皆さんありがとうございました・・・
方針としてはPDFSharpをもっかいいじくり倒して、他にもいろいろ試してみます・・・
プレプリント紙への印刷やめたい
>>340
そんなソフトあるんですね!サーバ版たけぇ・・
>>342
クライアントサイドのレンダリングはちょっときついです、環境バラバラなんで
>>343
自分にはグラフィックをちょうどよくテンプレにはめる設計力がなさげ
>>345
折り返しするんですよね。。
まあそれ以前使うフォントが特殊でつまずいたっていうのがありましたが
352:デフォルトの名無しさん
20/10/20 13:50:07.09 d69BLAaZa.net
>>346
クライアントサイドじゃないよ
サーバーでヘッドレスブラウザ使ってPDF出力してレスポンス返すだけ
353:デフォルトの名無しさん
20/10/20 14:00:01.34 0/xBmjm30.net
>>346
Excelで帳票のテンプレート作ってそれをPDFにできるんでめっちゃ楽
みんな慣れてるでしょExcel帳票w
354:デフォルトの名無しさん
20/10/20 15:28:40.52 N2Y7+9Dy0.net
>>347
そうなんですね!ちょっと見てみます
>>348
Excel帳票大好きです(大嫌いです)
355:デフォルトの名無しさん
20/10/20 16:09:37.19 CqCKSidt0.net
C♯が現在最強言語らしいので勉強したいのですが
マイクロソフトはVB6の開発を打ち切ってプログラマを裏切った過去があるそうで
なかなか踏み切れずにいます。。。
C♯は20年後も開発が続いてると思いますか?
教えてエロい人
356:デフォルトの名無しさん
20/10/20 16:14:23.52 Nb9oJ8Mwd.net
そんな先のことなんざわからん
確実に言えるのは今勉強している技術を20年後も変わらずに使い続ける前提でいるような技術者は居ない(と信じたい)
生き残ってるなら初期学習がない分少し楽かもしれないけど、新しいのが台頭してくりゃそちらを新たに学習するだけ
357:デフォルトの名無しさん
20/10/20 16:25:01.94 CqCKSidt0.net
そうですか。先のことは誰にもわからないですよね。
逆に20年後も確実に主力な言語ってPythonくらいかな?
358:デフォルトの名無しさん
20/10/20 16:25:26.41 cR623l/E0.net
>>350
開発が続いてる言語の新しい技術についていくような人はどんな言語でもすぐ学べる
359:デフォルトの名無しさん
20/10/20 16:31:38.91 CqCKSidt0.net
>>353
新しい技術について行く用意はあるんですが
言語の基本的な記述などのルールが変わるのが面倒なんですよね。。。
360:デフォルトの名無しさん
20/10/20 16:45:13.07 0/xBmjm30.net
C#ほど後方互換性を重要視している言語ってなかなかないと思うけどね
361:デフォルトの名無しさん
20/10/20 16:48:10.12 CqCKSidt0.net
>>355
そうなんですか。ではC♯を勉強すれば基本記述まで変更なんて
事はしばらくはなさそう?ですね。。。
勉強してみます!!
362:デフォルトの名無しさん
20/10/20 17:16:01.37 nipGGPAZa.net
>>354
勉強が1ヶ月続くかどうかも怪しい奴が20年後の心配をするのは馬鹿げているぞ。
そんなことじゃ、何かを勉強し始めたとしてもことあるごとに足踏みして前進できない未来しか見えない。
363:デフォルトの名無しさん
20/10/20 18:10:04.06 kSL2D2eBa.net
OfficeのマクロはまだVBなんだっけ?
364:デフォルトの名無しさん
20/10/20 18:13:11.84 Nb9oJ8Mwd.net
そだね
python使えるようにするみたいな話はあったけど進行してるのかな?
365:デフォルトの名無しさん
20/10/20 18:15:13.55 ATqqkPAW0.net
>python使えるようにするみたいな話
頓挫したぞ
366:デフォルトの名無しさん
20/10/20 19:53:46.10 c2x7XoZLd.net
贅沢言わないから.NETにpython入れてVisualStudio(codeじゃない方)でサポートしてくれるだけでいいのに
367:デフォルトの名無しさん
20/10/20 21:29:38.81 j1S9Ds0j0.net
それIronPythonと何が違うの?
368:デフォルトの名無しさん
20/10/20 21:48:49.93 iUu5GsdY0.net
>>358
まだExcelのWeb版だけみたいだけどJavaScript/TypeScriptが使える
マクロじゃなくアドインならC#やF#みたいなCLR言語ならなんでも可だったかと
369:デフォルトの名無しさん
20/10/20 22:16:42.30 jgnvePEX0.net
ChromeベースのWebView2がやっとラウンチしたようだね。まだ.netじゃ使えないが
Previewで確認したところマウスの戻るボタンが使えるのがいい所だな
370:デフォルトの名無しさん
20/10/20 22:51:38.52 kSL2D2eBa.net
>>363
へーそれは知らんかったありがと。
371:デフォルトの名無しさん
20/10/20 23:36:15.59 CqCKSidt0.net
>>362
IronPythonって2.7っしょ
使えないな。。。
372:デフォルトの名無しさん
20/10/21 00:36:52.32 0KDGF23Y0.net
なんかうろ覚えなんだが
こういう非同期処理の書き方ってちゃんと動いたっけ?
if(!locked){
locked = true;
await xxx.Task;
locked = false;
}
async/awaitは同じスレッドに戻るからこんな単純なロックでも問題無いって昔判断したような記憶はある
373:デフォルトの名無しさん
20/10/21 09:14:18.23 hl6LkBs90.net
ソースの一行単位でスキがうまれるので無理じゃね
ifとlocked=trueの間に実行されてる
374:デフォルトの名無しさん
20/10/21 09:16:03.92 hl6LkBs90.net
1行単位どころじゃなかった
意味不明なところでも割り込みあるわw
375:デフォルトの名無しさん
20/10/21 09:43:40.30 eNSg6QZpH.net
四捨五入の結果がおかしいのって自分だけかな・・・
decimal v = -0.0195m;
decimal rounded = Math.Round(v, 2, MidpointRounding.ToPositiveInfinity);
Console.WriteLine(rounded);
ってすると、小数点2桁までになるよう(小数点3桁目を)四捨五入するので
-0.02になるはずなのに、結果が-0.01になっちゃうんですけど・・・
376:デフォルトの名無しさん
20/10/21 09:56:42.42 lxmGvu010.net
>>367
Taskの中でlockする
URLリンク(docs.microsoft.com)
377:デフォルトの名無しさん
20/10/21 12:02:28.19 sg7OOy0L0.net
>>367-369
awaitで同期取ってるから問題ない
>>370
To Positive Infinityだから正数寄りになる
ゼロを基準にしたければMidpointRounding.AwayFromZeroを指定する
await(待つ)もそうだが、変な日本語のリファレンスよりも明快な解説が変数名に詰まってるんだからお前らはまずその単語をGoogle翻訳に掛けるべきだと思うわ
378:デフォルトの名無しさん
20/10/21 12:16:57.36 hl6LkBs90.net
>>372
いや
if(!locked){
実行
別タスクlockedのfalseを見て処理開始
locked = true;
別タスク割り込まれたら困る処理開始
await xxx.Task;←別タスクと衝突
locked = false;
}
起こるじゃん
379:デフォルトの名無しさん
20/10/21 13:03:41.62 eNSg6QZpH.net
>>372
-0.01と-0.02の中間(MidPoint)である-0.015のときの丸め方(Rounding)として
「MidpointRounding.ToPositiveInfinity」を指定したつもりだったのですが・・・
MidPointじゃないときにも「ToPositiveInfinity」が適用されちゃうんですね・・・
JavaScriptのMath.Round()とおなじような(四捨五入される桁の数字が5の場合に
正の無限大の方向で丸める)四捨五入をしたかっただけなのですが、
関数を自作しないとだめみたいなので自作します。
お騒がせしました。
380:デフォルトの名無しさん
20/10/21 13:30:40.39 UaTtUbsy0.net
await絡みのときは、排他制御はSemaphoreSlim使うのが定番ですよ
URLリンク(www.atmarkit.co.jp)
381:デフォルトの名無しさん
20/10/21 13:44:12.17 RtxzEAIBa.net
四捨五入:わかる
銀行丸め:わかる
正の無限大の方向で丸める:何の意味があんのそれ?
382:デフォルトの名無しさん
20/10/21 13:52:03.73 xBoANC0iM.net
切り上げって知ってる?
383:デフォルトの名無しさん
20/10/21 14:15:10.32 sg7OOy0L0.net
>>374
それならこんな感じで簡単に作れるから頑張れ
static decimal[] table = new decimal[]{1E0m, 1E1m, 1E2m, 1E3m, 1E4m};
static decimal Round(decimal num, int pow) => Decimal.Floor((num * table[pow]) + 0.5m) / table[pow];
decimal num = Round(-0.015m, 2); // -0.01
>>373
普通にメインスレッドから叩いていればこうなるからな
if(!locked){ // thread 1
locked = true; // thread 1
await xxx.Task; // thread 2
locked = false; // thread 1
}
384:デフォルトの名無しさん
20/10/21 14:19:07.15 lJjSrE40d.net
正負どっち方向に動くかわかんない変換より確実に方向がわかっている変換が必要なことはあるよ
385:デフォルトの名無しさん
20/10/21 14:26:27.71 RtxzEAIBa.net
-2.4 → -2
-2.5 → -2
-2.6 → -3
こういう丸めが意味を持つケースが一般的とは思えない
>>377
知らないのは君だと思うよ
386:デフォルトの名無しさん
20/10/21 14:32:15.81 lJjSrE40d.net
5捨6入って特定に分野では一般的な計算方法では?
俺は使わないけど
387:デフォルトの名無しさん
20/10/21 14:33:15.98 RtxzEAIBa.net
>>381
3.5 → 4
なんだよ
388:デフォルトの名無しさん
20/10/21 14:47:36.44 8k52si4D0.net
それでもう.NET5使ってええの?
389:デフォルトの名無しさん
20/10/21 14:52:13.96 v0oiVQF00.net
いいよ
390:デフォルトの名無しさん
20/10/21 15:00:31.64 5E7rZ8hS0.net
>>378
それが問題になるのは、そのifブロックが複数スレッドで実行されたときだからな
391:デフォルトの名無しさん
20/10/21 16:37:46.89 APVpE4AA0.net
>>378
はじめのlockedをみてるガードは別スレッドからのアクセスに対して無力だよ
そこはおk?
>>378の番号で言ったらThread3以上のスレッドからの話ね
392:デフォルトの名無しさん
20/10/21 17:36:18.89 sg7OOy0L0.net
>>386
つまりこういうのを危惧してるのか?
Task.Run(() => {
if(!locked){
locked = true;
await xxx.Task;
locked = false;
}
});
だとしたらこんなのは仮定
393:に持ち出すのがそもそも間違い それ言い出したらフィールド操作するあらゆるメソッドで「並列で呼び出される可能性がある」とlock()で括らなきゃいけなくなってしまう
394:デフォルトの名無しさん
20/10/21 17:53:44.86 lxmGvu010.net
ifブロックがシングルスレッドでしか実行されない状況で
lockが必要な状況ってどういうの?
395:デフォルトの名無しさん
20/10/21 17:55:56.87 5E7rZ8hS0.net
元の質問がマルチスレッドでのロックに関する質問だと思うのだがな
このコードはスレッドセーフですか?
いいえ危険です
みんなが回答してるのはそういう事
このスレの趣旨や質問者のレベルを考えると妥当な仮定と回答だと思うぞ
396:デフォルトの名無しさん
20/10/21 17:58:26.66 5E7rZ8hS0.net
>>388
再入すればやばい気がしないでもない
397:デフォルトの名無しさん
20/10/21 18:02:52.19 sg7OOy0L0.net
元の質問って>>367だろ?
> async/awaitは同じスレッドに戻るからこんな単純なロックでも問題無い
「同じスレッドに戻る」を認識してるなら疑いなくtrueやん
ここで「でも別スレッドで動かしたら危険」と言うのは質問の前提を崩してる
398:デフォルトの名無しさん
20/10/21 18:14:17.17 MqdNiLmu0.net
崩してないな。
399:デフォルトの名無しさん
20/10/21 18:19:06.78 5E7rZ8hS0.net
そのawaitしてるのはasyncメソッドだから、メインスレッドからのみ呼ばれるとは限らん
つまりもどるのがメインスレッドだとは限らん
というの理解しているのならまあ大きなお世話だと言えなくもないが
あとフォームアプリじゃなければ、もとのスレッドに戻るも保障されないけどな
400:デフォルトの名無しさん
20/10/21 19:06:44.50 lxmGvu010.net
>>390
なるほど
ロックって言葉でちょっと意図を勘違いしてた
タスクが実行中ならもう1回呼ばれても実行しないようにしたいってことだったのか
タスクの中には他のスレッドと競合する処理はなく
ifブロックはUIスレッドでのみ実行されるという前提ならいいんじゃねって気がする
401:デフォルトの名無しさん
20/10/21 19:15:16.66 /GjtxlMb0.net
そもそも呼ばれないようにしろ
402:デフォルトの名無しさん
20/10/21 19:22:35.51 sg7OOy0L0.net
>>393
何か必死で調べたくさいこと言ってるが
asyncだから、って下りに無知が現れてるな
403:デフォルトの名無しさん
20/10/21 20:02:51.66 GqMp+oa10.net
>>367 の質問自体は「問題ない」が回答だけど、
そもそも質問の前提に危うさがあるんじゃない?
って感じではダメなんだろうか。
404:デフォルトの名無しさん
20/10/21 21:32:30.66 38qDfhYJM.net
>>339
まだ帳票開発したことないけど、やる機会があればDocurainってサービス使ってみようかなって思ってる
405:デフォルトの名無しさん
20/10/24 21:17:36.19 skFEsPcd0.net
for文で書き始めて、配列から要素を取り出すだけだからforeachに書き換えて、でもやっぱりiが必要になってfor文に戻すこと多くない?
406:デフォルトの名無しさん
20/10/24 21:32:32.75 //9fx+gF0.net
Index付きのSelect句で事足りる
407:デフォルトの名無しさん
20/10/24 21:50:33.27 878uww5f0.net
MoreLinqのIndex()がKeyValuePair<int, TSource>を返してくれる
簡単だから自分で実装してもいいけどライブラリ使うほうが管理含めて楽
foreach (var (i, x) in foo.Index()) {
Console.WriteLine($"{i}: {x}");
}
408:デフォルトの名無しさん
20/10/24 21:55:59.78 skFEsPcd0.net
そうなんだ
409:デフォルトの名無しさん
20/10/24 22:19:40.87 VOTutQQJ0.net
>>401
いや、これ書くぐらいならforで書くよな
410:デフォルトの名無しさん
20/10/24 23:15:08.92 GpR1sqnP0.net
>>403
たしかに
411:デフォルトの名無しさん
20/10/24 23:52:47.91 878uww5f0.net
またLinqバトル始まっちゃう感じ?
412:デフォルトの名無しさん
20/10/25 00:14:13.24 AkfEJdVF0.net
(index, value)と(value, index)でバグを作ってしまったから
Index拡張メソッドは控えることにした
413:デフォルトの名無しさん
20/10/25 00:16:36.51 wq/6wJQN0.net
>>406
それあるわ
他人のプログラムが前者で、自分は後者派だったからお互いえ?え?となったわ
414:デフォルトの名無しさん
20/10/25 00:24:48.70 lDlwJ32m0.net
そもそもforeachなんて作ったやつの脳みそ腐ってんだから仕方ない
何回回すのかもコードからわかんねーし
どう回したいのか変わると一気に産廃
そもそもforeachなんて産廃コード使うなよ
変更に激弱だろ
あ、インデックスN番目は処理したくない
→産廃
あ、後から処理しないと
→産廃
あ、奇数と偶数で処理変えないと
→産廃
あ、こっちの配列もみながらいっしょに処理しないと
→産廃
もうあれね
コードレビューでforeachを見つけたら
修正させるぐらいでいい
415:デフォルトの名無しさん
20/10/25 07:44:18.56 yVRP623B0.net
インデックスを考えるような用途でforeach使うほうが悪いだろ。
偶数と奇数で処理変えるのも意味わからんし、イテーレタを一つずつって変更に強いと思うけど。
全部Linqでなんとかなることだけどさ。
416:デフォルトの名無しさん
20/10/25 08:02:57.19 bN5bdnqa0.net
紅白に塗るとかあるよね
417:デフォルトの名無しさん
20/10/25 09:10:32.90 WAUUQolqM.net
偶数の場合こう処理します!
プログラム解説サイトとかでありがち。
実務でそういうのに出くわしたことほぼない。
418:デフォルトの名無しさん
20/10/25 09:22:04.05 lDlwJ32m0.net
>>411
あるよ
datagridviewとか見にくいから偶数と奇数で色変えてくれってありがちじゃん
419:デフォルトの名無しさん
20/10/25 09:24:16.14 lDlwJ32m0.net
2行でワンセットになるデータで
上側だけ、下側だけって処理するときもお世話になるじゃん
どんだけ組んだことないんだよ
420:デフォルトの名無しさん
20/10/25 09:26:32.27 XkKy2l3/0.net
WPFみたいな割と最近のライブラリなら、
自前で偶数判断なんてせず交互に色を変えてくれる。
421:デフォルトの名無しさん
20/10/25 09:36:22.60 w//Xf3xfd.net
>>412
それはデータ行に対してやることじゃない。
行に対して表示非表示の制御加えるだけで破綻する。
表示中の画面の描画関数でやることであって、行をイテレートしてやることじゃない。
>>413
2行1セットなら、そのクラスを作って、1インスタンスごとに制御するのが王道でしょ。
どんだけ空想上の「組んだこと」で話してんの?それともボンクラなの?
422:デフォルトの名無しさん
20/10/25 09:37:37.76 lDlwJ32m0.net
>>415
え?いやでも必要じゃん
そんときforeach使わないよね
423:デフォルトの名無しさん
20/10/25 09:40:44.86 w//Xf3xfd.net
>>416
必要じゃないし、パース時点ではパーサ使うし、中では極力foreach使うよ。
2行で1アイテムが3行で1アイテムになったときにModulo全部変えてくの?
頭悪すぎるコーディングでしょ。
424:デフォルトの名無しさん
20/10/25 09:47:07.55 lDlwJ32m0.net
>>417
は?
いや客は単に奇数と偶数行で色変えてくれって言ってるだけやで
425:デフォルトの名無しさん
20/10/25 10:01:32.46 yVRP623B0.net
>>418
画面側でやること。
描画関数には何行目かそもそも渡ってくるからループなんぞする必要もないだろ。
それを客が言ってるからってデータでやるのは手早くて汚い方法取ってるか、それしか知らないって事じゃん?
426:デフォルトの名無しさん
20/10/25 10:29:58.35 j2oMvxGH0.net
>>419
うーん、確かにdatagridviewで偶数と奇数だとそれだけだなw
俺が悪かった
427:デフォルトの名無しさん
20/10/25 10:32:46.22 j2oMvxGH0.net
ループで奇数と偶数は別の描画ライブラリ使っててそっちの話だった
すまん
428:デフォルトの名無しさん
20/10/25 10:35:11.15 yVRP623B0.net
なんか俺も言い方悪かったな。すまん。
429:デフォルトの名無しさん
20/10/25 10:36:49.62 MD0uz1BLa.net
最近のC#ならTupleで書けるからindexつきSelectのほうが短く書けて楽かな
foreach (var (item, index) in items.Select((x, i) => (x, i)))
{
Console.WriteLine($"{index}: {item}");
}
for (var index = 0; index <= items.Length; i++)
{
var item = items[i];
Console.WriteLine($"{index}: {item}");
}
後者の書き方に仕込まれてるバグを目視だけで見つけるのはやっぱりしんどい
ていうかDataGridViewなら奇数行・偶数行のスタイルをそれぞれ別に設定できたはず
なんでそれ使わないでロジックで制御するんだろう
430:デフォルトの名無しさん
20/10/25 10:46:49.59 WAUUQolqM.net
>>412
そんな偶数奇数で色変えるとかはコントロール側で制御して、各機能では意識せずに作れるようにしてる。
有償のものは標準でそういう機能ついてる。
あなたのところは各機能でそんなことさせてるの?
ほとんどのシーンでforeachは使えるしforより可読性も高い。
C上がりのひとは頑なにfor文つかうよね。
431:デフォルトの名無しさん
20/10/25 10:48:09.55 WAUUQolqM.net
とか書いてたら話終わってた…
432:デフォルトの名無しさん
20/10/25 10:57:42.82 ad5S/9r+d.net
BASIC上がりの俺は頑なにforを使う
433:デフォルトの名無しさん
20/10/25 11:43:12.08 6wSnm1o40.net
フォームアプリを作成していて、
作ったタブページを一時的に表示させないようにしたいのですが
(開発者用なのでユーザーから隠したいタブページ)
invisible設定とかないのでしょうか?
434:デフォルトの名無しさん
20/10/25 11:54:01.85 bN5bdnqa0.net
visibleをfalseにしる
435:デフォルトの名無しさん
20/10/25 13:16:25.56 FzqccguI0.net
elisp上がりだとdolistか
436:デフォルトの名無しさん
20/10/25 13:18:15.58 MD0uz1BLa.net
>>427
URLリンク(dobon.net)