ふらっと C#,C♯,C#(初心者用) Part148at TECH
ふらっと C#,C♯,C#(初心者用) Part148 - 暇つぶし2ch159: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)

437:デフォルトの名無しさん
20/10/25 13:20:19.02 M7kzCKlu0.net
>>406
拡張メソッドの問題ではないような・・・
それはいいとして順番だけど
map/reduce系のAPIはindexがオプショナルなので引数の順番は(value, index)が一般的で
index付きのtuple的なもの返す場合は(index, value)で返すほうが一般的
自分の知ってる言語はどれもそうなってるよ

438:デフォルトの名無しさん
20/10/28 07:40:35.09 qnSD+cEJ0.net
C#で作られた2つの実行中プログラムの間でデータの受け渡しをするならどういう方法が考えられますか?
csvやデータベースくらいしか思いつかず

439:デフォルトの名無しさん
20/10/28 08:05:19.87 68kYXJV6d.net
>>432
ポート開けて通信する。
プロセス間通信する。
のどっちかかな。
Core化するなら、ポート開けて通信したほうが良いかも。
embedIOとか使うとhttpサーバがびっくりするほど簡単に立てられるよ。既存アプリの上に。

440:デフォルトの名無しさん
20/10/28 08:10:45.70 geAq98MI0.net
GUI同士ならSendMessageとかも

441:デフォルトの名無しさん
20/10/28 08:41:56.32 cCglm1Caa.net
>>432
小さいデータならソケットやパイプ
大きいデータなら共有メモリ
スピードを問われないならファイルやDBでもいい

442:デフォルトの名無しさん
20/10/28 09:08:45.24 Nt7id6vD0.net
Web API

443:デフォルトの名無しさん
20/10/28 09:13:36.29 DyAY2wG10.net
WCFの後継とかどうすりゃいんだ

444:デフォルトの名無しさん
20/10/28 09:22:47.39 Nt7id6vD0.net
>>437
URLリンク(github.com)

445:デフォルトの名無しさん
20/10/28 09:28:12.57 3bmwn6Ba0.net
WCF 開発者に gRPC を推奨する理由
URLリンク(docs.microsoft.com)

446:デフォルトの名無しさん
20/10/28 22:35:34.95 bWE1nSHc0.net
うちにはRemoting使ってて詰んでるレガシーがある

447:デフォルトの名無しさん
20/10/29 08:48:31.11 GkpRv4Lwa.net
MSMQという手も

448:デフォルトの名無しさん
20/10/29 12:27:01.55 VHRGFK1gM.net
MQTT

449:デフォルトの名無しさん
20/10/29 19:28:53.48 obW6sm8G0.net
>>435
共有メモリというのは知らなかったです
勉強してみます
ありがとうございます

450:デフォルトの名無しさん
20/10/29 20:32:35.12 ytciXGtBp.net
お前が好きだと今日言うメモリー
気持ちを交換共有メモリー

451:デフォルトの名無しさん
20/10/29 21:27:35.00 fAmed0Klr.net
動的なJsonを作成したいのですが、いい方法ありませんか?
今考えてるのは
1. Jsonシリアライズ用クラスを用意(複数)
2. 処理部で使用するタイミングで1.クラスnew
3. 2.でnewしたクラスのみ匿名型オブジェクトに突っ込む
4. 3.をシリアライズ
これで一応は出来るんですが、3.で分岐多くなるのが非常に汚くて。

452:デフォルトの名無しさん
20/10/29 21:28:58.34 fAmed0Klr.net
できれば使用したタイミングで、都度匿名型に追加できればいいんですが、実装方法わからず…

453:デフォルトの名無しさん
20/10/29 21:32:20.78 fAmed0Klr.net
都度匿名型に追加ってのはあくまでイメージですはい。

454:デフォルトの名無しさん
20/10/29 21:37:54.98 w+K6PrrE0.net
DynamicObjectとか使えばよかったような

455:デフォルトの名無しさん
20/10/29 21:45:46.98 HAxtGf170.net
いまいちよく分からんが、Dictionary<string, object>だとダメなの?

456:デフォルトの名無しさん
20/10/29 22:08:26.61 fAmed0Klr.net
>>448
あ、何かできそうな予感。試してみます。
>>449
使用の度にAddすればって事ですね。
…何かこれもできそうな予感…試してみます。

457:デフォルトの名無しさん
20/10/29 22:56:17.00 28O5aXgi0.net
>>426
Python が最初だとどうなるんだろうな

458:デフォルトの名無しさん
20/10/30 05:36:06.93 Of4L3rez0.net
スタティックライブラリーを使うためDLLにしているのだが、関数ポインタを引数にする関数があって困っています。
C#の関数をその関数ポインタに結びつける方法ありますか?

459:デフォルトの名無しさん
20/10/30 07:28:47.86 NoXL5vik0.net
>>452
関数ポインタ引数に対してはdelegateをそのまま渡せばいいよ
LPCTSTR引数に対してstringをそのまま放り込んでも成立するのと同様にdelegateもPVOIDとして解釈される
つまりそのDLLで使う関数の型のdelegate型を作って渡せば良いだけ

460:デフォルトの名無しさん
20/10/30 07:32:51.69 NoXL5vik0.net
ちなみにC#9だか10からは生の関数ポインタも扱えるって聞いた

461:デフォルトの名無しさん
20/10/30 09:43:54.51 Of4L3rez0.net
>>453
ありがとうございます。

462:デフォルトの名無しさん
20/10/30 09:48:27.53 +BFmFpNo0.net
関数ポインタをDLL側が保持する(寿命が関数から返ってくるまでより長い)場合は
マネージ側もその間そのdelegateインスタンスを保持しとかないとだめだぞ

463:デフォルトの名無しさん
20/10/30 12:16:19.25 7MkyV1CpF.net
>>445
msgpack

464:デフォルトの名無しさん
20/10/30 23:02:16.07 YXzIJ61G0.net
>>454
どどど、どう書くの?

465:デフォルトの名無しさん
20/10/31 12:17:23.59 8cswqFVg0.net
>>458
URLリンク(ufcpp.net)

466:デフォルトの名無しさん
20/10/31 12:27:36.76 fxcwqRC2F.net
>>459
URLリンク(www.youtube.com)

467:デフォルトの名無しさん
20/10/31 20:35:43.78 jPO/JqMva.net
最近最新版がプレリリースされたwebView2って、C#ではまだ使えないんでしょうか?
URLリンク(docs.microsoft.com)
上記サイトに習ってnugetからインストールし、1日いろいろ試して全く動作しませんでした。
ソリューションエクスプローラーの参照の、webView2をダブルクリックすると、「このプロジェクトは利用不可能き、またはビルドされていないため、オブジェクトブラウザで表示できません」と表示されます。
webView2もVisualStudioもMicrosoft Edgeも最新版をインストールしてもダメでした。

468:デフォルトの名無しさん
20/10/31 20:37:54.93 jPO/JqMva.net
間違えました。
「このプロジェクトは利用不可能か、またはビルドされていないため、オブジェクトブラウザでは表示できません。」の間違いです。

469:デフォルトの名無しさん
20/10/31 20:40:31.48 4IwElBvx0.net
WindowsFormsを勉強しはじめたんだけど
テキストボックスに処理の状況を逐一表示させたい場合ってどうやるのが正しいやり方?
とりあえずこんな感じで作ってみたら動くけどなんか違う気がする
URLリンク(ideone.com)

470:デフォルトの名無しさん
20/10/31 20:55:29.78 Pj54f0iv0.net
ログ的な事をやりたいんだったらListBox使う方が良いよ
一定行数に達したら先頭(最終)行を削除とかも簡単に実装できる

471:デフォルトの名無しさん
20/10/31 21:00:31.63 +32PkI4zM.net
>>463
allocconsole してconsole に出力するの吉

472:デフォルトの名無しさん
20/10/31 21:00:33.78 1joLaKYt0.net
>>463
それでも良いと思うけどConsole.WriteLineみたいに強制改行関数作っといたら?
あとC#自体のアドバイスになるけど、"処理しています……" + "\r\n"は+いらないから"処理しています……\r\n"で良いし
変数挟むときは$を付けて{}で囲む$"あと{i}秒\r\n"って書き方は各プログラミング言語の中でもトップクラスに便利だから覚えておいた方が良い

473:デフォルトの名無しさん
20/10/31 21:34:45.65 2P+i0kOV0.net
>>463
>>466の言うように文字列とか送るだけで表示するメソッド作っておくといろいろ後付けで改変しやすくなる
RichTextBox使えば状況に応じて文字列ごとに色やフォントを変えることもできるし
あとAppendTextは自動でTextBoxをスクロールしてくれる便利なものだけどメソッドの先頭で念のためFocus()かSelect()しておくと確実
フォーカス当たってないと自動スクロールしてくれないので

474:デフォルトの名無しさん
20/10/31 21:59:39.41 b+5qg5vxa.net
>>463
何に不満や違和感を感じてるのか具体的に言わないと誰も答えようがないよw
プログラミングの分野に限らず他人に自分の意図を正確に伝えることってほんと大事

475:デフォルトの名無しさん
20/10/31 22:07:28.55 1TbrihkJ0.net
>>463
その方法が正攻法だと思って良い
あとは他の人のアドバイスのように便利なメソッド作って使いやすくすればいいと思う

476:デフォルトの名無しさん
20/10/31 22:21:19.47 4IwElBvx0.net
>>464
ありがとう。使ってみる
>>465
今回やりたい事は違うけどこれはこれで知りたかった事だ。ありがとう
>>466
改行用の関数をForm1の方で作っといてdelegateかfuncで処理用クラスに渡す感じかな?
$マークのやつそういう使い方だったんかサンクス
あと改行だけ分けたのは元のコードで「str + “¥r¥n”」の形だったのを直した名残だわ
>>467
フォーカス当たってないとスクロールしてくれないのか
なんか動いてくれないと思ってたんだよな

477:デフォルトの名無しさん
20/10/31 22:39:35.75 syXSgGXN0.net
>>470
積極的にコンソールを使う意図が無いのであれば、AllocConsoleよりも
System.Diagnostics名前空間のDebug.WriteLine()やTrace.WriteLine()を勧める
VSのデバッグ出力画面やDebugView++等のアプリで見れる

478:デフォルトの名無しさん
20/10/31 23:14:04.52 +32PkI4zM.net
コンソールにはコンソールのメリットが
あるからなぁw

479:デフォルトの名無しさん
20/11/01 00:44:45.18 TS2lQNKS0.net
>>461
本当に書かれている通りにやったの?
・WebView2はプレリリース版でなければならない(今だと1.0.674-prereleaseかな?)
・EdgeはCanary版でなければならない
なんとなく、WebView2のプレリリース版でなく安定版の方を入れてそうな予感


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch