19/12/11 22:12:11.28 d09CciDz0.net
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part145
スレリンク(tech板)
■関連スレ
C#, C♯, C#相談室 Part95
スレリンク(tech板)
■コードを貼る場合は↓を使いましょう。
URLリンク(ideone.com)
URLリンク(dotnetfiddle.net)
■情報源
URLリンク(docs.microsoft.com)
URLリンク(docs.microsoft.com)
URLリンク(docs.microsoft.com)
URLリンク(referencesource.microsoft.com)
・Insider.NET > .NET TIPS - @IT
URLリンク(www.atmarkit.co.jp)
・DOBON.NET .NET Tips
URLリンク(dobon.net)
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2:デフォルトの名無しさん
19/12/11 22:32:15.34 mMKqVbip0.net
C#
3:デフォルトの名無しさん (ワイーワ2 FFfa-uKDx)
19/12/12 09:41:18 a67Hqgb2F.net
O2
4:デフォルトの名無しさん
19/12/12 14:29:42.64 56xY8w560.net
ひらがな文字列をヘボン式ローマ字に変換するプログラム作りたいのですが
やっぱ正攻法でswitch-caseで123個くらい分岐させますか?
でも長音や促音の例外処理とか難しそうだなあ・・・
5:デフォルトの名無しさん
19/12/12 14:47:29.26 b3wcvAqBF.net
変換テーブルと検索
6:デフォルトの名無しさん
19/12/12 17:38:52.89 OYDho7HG0.net
UNIXのShellのソースでコマンドを切り分ける場所では思いっきりswitch文の嵐だったな
1文字目でまず切り分けで、次にに文字目ってな具合で
速度なら圧倒的にswitch分だと思うが、作りやすかったり保守が簡単なのはDictionary使ったパターンだと思う
7:デフォルトの名無しさん
19/12/12 17:42:49.22 NIaj3T140.net
要素数が多くなれば多くなる程switch文よりDictionaryの方が速度的にも早くなるのでは?
8:デフォルトの名無しさん
19/12/12 17:52:34.02 VQC2yHD50.net
つ libstree
9:デフォルトの名無しさん
19/12/12 18:32:36.61 Ijd1d2r8M.net
>>7
C#コンパイラは多数の分岐先を持つswitchの場合には二分探索を行うコードを生成したりする
基本的に人間が最適化するより速い
10:デフォルトの名無しさん
19/12/12 19:09:09.93 56xY8w560.net
>>4です
ありがとうございます
switchでコツウコツやることにします
要素の数え漏れでもっと増えそうだし
例外を拾う処理も考えなきゃww
11:デフォルトの名無しさん
19/12/12 19:47:35.25 XSG0K+ND0.net
vs2017ExpressでC#のフォームを使ってSQLiteのデータをDataGridViewに表示させたいです
セキュリティの関係でSystem.data.SQLiteを使うには申請が必要でMicrosoft.data.SQLiteを使っています
SQLiteをデータソース欄に追加する方法を教えてもらえないでしょうか?
12:デフォルトの名無しさん
19/12/12 21:16:54.09 XSG0K+ND0.net
ソース貼り忘れました
URLリンク(dotnetfiddle.net)
よろしくお願いします
13:デフォルトの名無しさん
19/12/13 10:16:06.63 V90d9jYdF.net
いくら払えますか
14:デフォルトの名無しさん
19/12/13 11:41:55.37 D/hLKfPDd.net
>>13
自宅でSystem.data.SQLiteをインストールして同じコードを書いたらデータベースに接続出来ました
恐らくSQLiteConnection等の参照が足りずにエラーなっていると思いますが、解決策が思い浮かばなかったのでSQL Serverを使って試したいと思います
申し訳ありません
15:デフォルトの名無しさん
19/12/13 12:10:09.33 SSw9bcJtd.net
Microsoft Visual Studio International Feature Pack を使うんだ!
KanaConversion クラスだったかに RomajiToHiragana メソッドがあったと思う
16:デフォルトの名無しさん
19/12/13 17:23:20.97 f86+e1mZM.net
>>10
亀レスで申し訳ないが、正規表現と Dictionary と LINQ を使えば 5 行くらいで書けるよ。
var kana = “あ|い|う|え|お|か|き|く|け|こ”;
var roman = “A|I|U|E|O|Ka|Ki|Ku|Ke|Ko”;
var dic = kana.Split(‘|’).Zip(roman.Split(‘|’), (l, r) => new { Key = l, Value = r}).ToDictionary( x => x.Key, x => x.Value );
Console.WriteLine(Regex.Replace(original_string, $”({kana})”, match => dic[match.Value]));
17:デフォルトの名無しさん
19/12/13 17:33:03.63 f86+e1mZM.net
あとは 50 音を全パターン書いてね。
ただし注意点があって、長いワードは短いワードよりも (例えば「ちょ」は「ち」よりも) 先に並べるんだ。
そうしないと短いワードが先に部分マッチしてしまう。
18:デフォルトの名無しさん
19/12/13 17:47:39.93 s9cNxHbdd.net
テーブル作る前提なら始めからdictionary作ればよくね?
19:デフォルトの名無しさん
19/12/13 17:49:41.61 s9cNxHbdd.net
一文字ずつ正規表現でマッチしてたらとんでもなく時間食いそうだな
姓名の変換くらいならどうとでもなるだろうけど
20:デフォルトの名無しさん
19/12/13 18:16:48.88 RrhzxBUdM.net
>>18
作っているのはテーブルだけではないし、このように書くとスッキリ書ける。
>>19
処理の重さの本質はワード比較による分岐であって、switch 分岐もそれに引きずられるから、C# で比較するならどちらも大差ないと思う。
正規表現の方が、むしろ、最適化がかかることに期待できる。
21:デフォルトの名無しさん
19/12/13 18:33:49.64 KAf60mjk0.net
まったくスッキリしてない
圧倒的にswitchが早い
22:デフォルトの名無しさん
19/12/13 18:44:01.44 8Ub64SZCM.net
>21
それは感情論だな。計時してみてくれよ。
Perl, JavaScript, Java, C# で正規表現を使うこと 30 年弱になるけど、パターンの複雑さによらず、正規表現が目に見えて遅いということはなかったな。
アセンブラでゴリゴリに最適化したものと比べたら遅いだろうが、同じ言語のユーザー定義関数より目に見えて遅いことはまあないと思うよ。
23:デフォルトの名無しさん
19/12/13 18:48:06.09 04gYwNVod.net
これならDictionary作るわ
24:デフォルトの名無しさん
19/12/13 18:51:56.74 8Ub64SZCM.net
>>23
何か勘違いしてないか?
こっちも Dictionary つくっているが。
25:デフォルトの名無しさん
19/12/13 19:49:57.23 KAf60mjk0.net
2文字置換を考慮したらスッキリは書けなかった
すまんこ
こんなクソみたいなコードでもregexよりは数倍早い
URLリンク(ideone.com)
頭良い人がもっとスッキリしたコード書いてくれそう
長文のほうがreplaceは不利だろうから数千文字にしたけどそれでも余裕
速度気にしないならregexで良いと思う
26:デフォルトの名無しさん
19/12/13 19:58:53.60 KAf60mjk0.net
最終文字が2文字置換対象じゃないときにsubstringで範囲外例外出るわ
条件1個追加しといて
27:デフォルトの名無しさん
19/12/13 20:57:05.81 9t702OJgd.net
小さい「っ」が未対応なことに気付いた
これ正規表現でもめんどいね
正規表現ならっを無視してreplaceした後に1個ずつ置換かなぁ
28:デフォルトの名無しさん
19/12/13 21:07:14.03 M1n71JyZ0.net
多少簡略化したロジックで計測してみた。
マッチ文字列が 1 文字固定なら、ユーザー定義関数の方が正規表現より 8 倍速かったが、1 ~ 2 文字可変なら所要時間は同じ。
パターンマッチの文字列長が可変・複雑になるとそれをハンドルするための分岐が増えるせいでユーザー定義関数は遅くなる。
もちろん置換をかけるオリジナル文字列の文字出現パターン&確率にもよる。
チューニングするなら C やアセンブラで書くべきだし、C# で書くなら正規表現で簡潔に書けるほうがよいのでは?
29:デフォルトの名無しさん
19/12/13 21:12:22.88 M1n71JyZ0.net
>>27
おもしろいところに気づいたね。
例えば仮文字 $ とかに変換しておいて、最後に直後の子音字に変換。
ちゃっと => cha $ to => cha t to
30:デフォルトの名無しさん
19/12/13 21:22:02.14 VulPdUq80.net
どうあがいてもregexは遅くないという結論にしたいみたいだけど
string単体で見ても遅いのにregexが遅くないわけがない
簡潔に書くならregexがスマートなパターンが多いのは分かってるよw
処理速度求められるパーサーなんかではまずregexなんか使わない
遅いと言っても数万文字の処理が何万回も必要とかでなければ気にするようなレベルではないので問題ないなら素直にregex使ったほうが良いよ
25ですでにそう言ってるしね
31:デフォルトの名無しさん
19/12/13 21:26:23.93 M1n71JyZ0.net
あるいはワンショットで置換するなら、下記のようなパターンを使って後方参照し、第1マッチ文字列が空でないなら、第2マッチ文字列の置換先の1文字目に置換するとか。
(っ?)(あ|い|う|え|お|か|き|く|け|こ)
32:デフォルトの名無しさん
19/12/13 21:26:56.26 yXJ+I/RUa.net
「ンョ゛ハー ゛」みたいなのが来た時の対応とか考え出すと仕様肥大化するだろうなあ
ひらがなカタカナ両対応とか、半角カナとか、
長音の代わりにハイフン使いだした場合とか
「ヴァッソ」とか
テストパターン考えるのも厄介そうだね
33:デフォルトの名無しさん
19/12/13 21:30:11.16 0IHjBlJG0.net
LALRを受理するジェネレータ書いたことがあるんだけど、状態表の大きさは字句解析のほうが遥かに大きくなるのが普通みたいですよ。
字句解析と構文解析は一つの表にまとめられるのに、なぜ分けるのかというのが最初の疑問だけど、なぜか答えが載ってる本が無い。
実際にやってみると表の大きさが爆発的に大きくなるからでした。
状態機械は分けられる箇所があるなら積極的に分けたほうが効率的になるようです。
34:デフォルトの名無しさん
19/12/13 21:30:12.87 M1n71JyZ0.net
>>30
文字列操作だからもちろん絶対的には遅いよ。
C# で書いたユーザー定義関数と比べたときに正規表現が相対的にそんなに不利かといったらそうではないだろうという予想を立てただけで。実際測ったら同等だったわけだけど。
35:デフォルトの名無しさん
19/12/13 21:30:26.83 7oWhly6q0.net
日経だったか「むかっっ」という促音が
重なる文章というか記事があったな
36:デフォルトの名無しさん
19/12/13 21:33:36.65 0IHjBlJG0.net
字句解析におけるNFA対DFAというのも最初に気になる部分です。
結論から言うと、NFAの選択は十分に考慮できるはずです。
僕も最初はDFAにこだわっていました。
でも、字句解析は表が大きくなりがちです。
特にregex並みの便利機能を組み込もうとすると、とても大きくなります。
たいていはNFAで十分かと思います。
37:デフォルトの名無しさん
19/12/13 21:37:02.69 0IHjBlJG0.net
ちなみに、DFAにこだわる理由は、多くの本がDFAのほうが効率的と述べているからです。
みんなそうだと思います。
最悪のケースではその通りですし、最悪のケースを考慮するのはセキュリティにも関わります。
でも最悪のケースはめったになく、たいていはNFAで十分で、たいていは効率的だと思います。
38:デフォルトの名無しさん
19/12/13 21:39:05.74 VulPdUq80.net
>>34
その同等だったっていうコード貼ってくれない?
25で貼ったコードで1文字2文字の比率変えてもregex側が常に3~4倍くらい遅いんだよね
古い.NETだとsubstringが遅いとかあった気がするんだけどその影響じゃないよね?
39:デフォルトの名無しさん
19/12/13 21:42:16.88 M1n71JyZ0.net
>>38
コード書いてくれてたんだね。
25 があぼーんで読めない。。。
40:デフォルトの名無しさん
19/12/13 21:42:32.85 f+S2ArPq0.net
>>4でーす
>>16以降、何書いてるのかサッパリ分かりません!
なんせまだifとforとswitchと文字列操作のメソッドくらいしか知らないもんでww
半年くらい後に読みに来まーす
41:デフォルトの名無しさん
19/12/13 21:51:25.19 M1n71JyZ0.net
>>38
コードは長すぎて多分アップできないと思う。
やっていることは switch 式を2 文字マッチの場合と 1 文字マッチの場合で 2 種類つくり、残文字列が 2 文字以上あるなら前者にかける (破棄パターン _ => で後者を呼び出す)、1文字なら後者にかけ、インデックスを進めるだけ。
置換後文字列の連結には StringBuilder 使っているし、メソッド呼び出しは AggressiveInlining している。ユーザー定義関数を意図的に遅くするようなことはしていない。
1文字あるいは2文字の切り出しに Substring 使っているけど、それが遅いのかな?
42:デフォルトの名無しさん
19/12/13 21:52:27.04 yXJ+I/RUa.net
ローマ字変換でばっとググってみた
お勉強用ならJavaScriptで書かれてるこれを理解しながらC#に移植するのがよさそうかな
ソースコードも簡潔だし悪くなさそう
URLリンク(www.pandanoir.info)
とにかく動けばいいというならMicrosoftが配ってるらしい「Japanese Kana Conversion Library」?でもこんなの使ったことないや
43:デフォルトの名無しさん
19/12/13 22:00:14.44 +9OE4qBy0.net
ンボマはmboma
ンバッペはmbappe
だからね
練習用なんだろうけど
簡単に見えても文字変換を自力でやるのはかなり面倒くさい
44:デフォルトの名無しさん
19/12/13 22:10:51.66 +9OE4qBy0.net
正規表現のほうが単純文字列比較より遅いのは当たり前
1文字比較の場合に単純比較と同等になるような
最適化が施されてるエンジン積んでれば数倍とかの差はつかない
少し古いバージョンのブラウザのJSのなら平気で10倍近い差が出てた
でもその差がUXに影響を与えるようなユースケースはそう多くはない
ちなみにstringのswitch caseは数が増えると
.NET Core以前は内部的にDictionary使うみたいよ
.NET Coreもhash比較するのは同じだけどDictionaryをアロケートしない方法にしてるらしい
45:デフォルトの名無しさん
19/12/13 22:12:49.12 VulPdUq80.net
>>39
これで見えるかね
URLリンク(ideone.com)
このコードはswitchじゃなくDictionaryでやった
おそらくswitchのほうがこれより早くなるか最適化で同程度になるはず
switch版までは作るのめんどい
配列の境界値チェックも遅い要因なのでできるだけチェックが発生しないのが望ましい
このコードでは2文字変換したときに境界値チェックが入ってしまうので2文字変換比率が高いと性能が悪くなる
2文字変換ばかりにしてもregexよりは早い
46:デフォルトの名無しさん
19/12/13 22:38:36.62 M1n71JyZ0.net
>>45
ありがとう。週末に評価してみる。
switch より Dictionary の方が処理性能がぶれない気がする。ハッシュで検索がワンショットに決まるから。switch は if カスケードを通ることで前スレで議論したパイプライン処理の影響を受けるため、処理速度がデータに強く依存する。
そんなわけでこの件の性能はコードの書き方 (チューニング含む)、データ、環境にかなり依存すると思う。
これは価値観の問題なのでみなが同じように考えるとは思わないが、正規表現で 3 - 4 倍程度の性能悪化なら、ユーザー定義関数よりチューニングより正規表現を私は採用する。
10 倍の悪化なら用途によっては考える。(パターンが複雑・多岐の場合) 正規表現は開発効率と保守性が 10 倍よいと思うので。
47:デフォルトの名無しさん
19/12/13 22:59:26.50 x4Cvv/aS0.net
>>46
switchとdicの関連は44が説明してくれてる
最適化次第でいい感じにしてくれるはずだからどっちもたいさない感じになると思う
個人的には性能差が10倍だろうが1000倍だろうが許容できるケースなら可読性を取る
今どき文字→数値変換でc-'0'なんて書かずに大体int.Parse使うのと同じ
UIに入力された氏名のローマ字変換みたいな1ユーザー1回で済むような処理に速度なんて無意味
GB単位のログデータをいじるなら数倍の差でも考慮すべき
なんなら入力データの傾向に応じてチューニングしやすい単純処理のほうが更に高性能にしやすい
48:デフォルトの名無しさん
19/12/13 23:21:38.26 Lnvxq+5t0.net
俺なら、ひらがな小文字の変換は、変換元「ちゃ」とか「ぱっ」のパターンを文字数降順で優先的に置き換えるかな。
配列で変換パターンを保持して、それにない文字パターンは先頭から徐々に削っていく。
それなら「ぱ」と「は゜」なんかも判りやすく対応できると思うよ。
49:デフォルトの名無しさん
19/12/13 23:36:31.48 M1n71JyZ0.net
>>44, 45, 47
みんな有益な考察をしてくれるのでありがたい。感謝。
今まで正規表現が際立って遅いと体感することなかったけど、利用目的を想定した評価をきちんとしたことなかったので一連の議論はとても参考になりました。
50:デフォルトの名無しさん
19/12/13 23:57:37.29 +9OE4qBy0.net
オリジナルの文字列を1文字ずらしでzipして
2文字ずつ取得するイテレータでやるのがいいかなとか思ってたが
多少非効率でも↓ここの実装みたいに繰り返し変換していく方が
条件分岐が少なくて読みやすいかも
URLリンク(tools.m-bsys.com)
URLリンク(tools.m-bsys.com)
function hebonG(s) {
s = s.replace(/ん([aiueoy])/g, "n$1");
s = s.replace(/ん/g, "n");
s = s.replace(/n([bpm])/g, "m$1");
…
var hebonGMap = {
"kuぁ": "kua", "kuぃ": "kui", "kuぇ": "kue", "kuぉ": "kuo",
…
}
…
s = s.replace(/っch/g, "tch");
s = s.replace(/っ([kstnhmyrwgzdbp])/g, "$1$1");
51:デフォルトの名無しさん
19/12/14 11:11:39.02 8NRAnTxB0.net
>>49
正規表現が遅いのは、コンパイルだろ
実行時ではなく、初期化時にコンパイルするようにと、Go の本には書いてある
52:デフォルトの名無しさん
19/12/14 11:24:37.56 8NRAnTxB0.net
>>4
Ruby では、条件分岐しなくても、変換用の辞書で書ける
>>16
も、これに似ている
hash = { 'ab' => 'あ', 'xy' => 'ん' }
p re = Regexp.union( hash.keys ) #=> /ab|xy/
p "9xy9ab9xyx".gsub( re, hash )
#=> 9ん9あ9んx
53:デフォルトの名無しさん
19/12/14 16:02:25.78 BZ704rid0.net
>>51
まあね。ただ、C# の Match Evaluator 付き Regex.Replace は事前コンパイルできないと思う。
ちなみにあの後何度か測り直したのだが、switch より事前コンパイルなし正規表現は 2 倍遅かった。同等ではなかった、すまん。
45 によると Dictionary & ユーザー定義文字列操作は正規表現より 3-4 倍良かったそうだから、今回のケースでは Dictionary : switch : 事前コンパイルなし正規表現 = 3-4 : 2 : 1 くらいの性能比かと考えられる。
switch はカスケードがさらに増えると内部で Dictionary 化して最適化されるから、一般論としては 正規表現は事前コンパイルすれば switch に肉薄する、あるいは、多少超えるかもしれないが switch に Dictionary 最適化がかかったらまた離されるかもって感じではないかと。
>>52
ありがとう。Match Evaluator 正規表現でハッシュ置換するのはもう四半世紀も使っているテクだけど他で見たことなかったから、Ruby の例は参考になる。
54:デフォルトの名無しさん
19/12/15 00:27:58.57 x+hGNtUDa.net
このスレにいる人たちで
C#を日本語で記述ってのを実際にやってる人、どれくらいいるかな
URLリンク(togetter.com) を読んで試してみてもいいかなと思ったんだけど
VisualStudioのコード補完が利く環境ならIME切替の手間もさほどかからない気もするし
何か致命的なデメリットとかあるんだろうか
55:デフォルトの名無しさん
19/12/15 02:49:23.51 SZPXyEbKa.net
>>54
ほとんどいないのでは?w
デメリットはインテリセンスとの相性の悪さに尽きるね。
どうでもいいけど「C#を日本語で記述」の是非というより識別子に日本語を使うことの是非だよね
論より証拠、やってみたらいかに非合理な試みか分かると思うよ
56:デフォルトの名無しさん (ワッチョイ e22c-3siJ)
19/12/15 05:39:16 fpSJINfx0.net
Ruby では、RSpec(BDD)のユニットテストで、
日本語の関数名を付ける人はいるけど
まあ、テストだからね
57:デフォルトの名無しさん (ワッチョイ 62ad-zBV4)
19/12/15 05:45:38 cmnyuAvp0.net
テストのメソッド名とかなら使っちゃうかな
58:デフォルトの名無しさん (ワッチョイ e242-xO71)
19/12/15 06:17:17 6XATZvNs0.net
enumの要素で使うと便利
どうせ数はないからインテリセンスも問題なし
59:デフォルトの名無しさん
19/12/15 13:41:49.81 TLgol4W/0.net
>>54
補完のために半角英数+日本語が便利
これなら最初だけだしIME切り替えは
60:デフォルトの名無しさん
19/12/15 14:56:15.21 pFDibfNW0.net
補完はomnisharp + migemoで解決できる
他言語で変数名に日本語使うのはよくやってるけど扱う対象の用語が固まってる場合は便利
そうじゃない場合は結構厳格に命名ルールを決めないと逆にわかりにくくなったりする
61:デフォルトの名無しさん
19/12/15 16:18:24.21 QBANyAHK0.net
俺が英語ができなかったり、デザインパターンの理解が足りなかったりするせいだとは思うけどさ
どうしてもファイル名=ネームスペース名=クラス名=主なメソッド名になりがちなんだわ
単一責任の原則に合わせた時、ファイル名~メソッド名まで決める簡単な基準とかあったら教えて欲しいな
62:デフォルトの名無しさん
19/12/15 16:21:28.32 NIombkpjF.net
Javaやりすぎると後遺症でそうなることがあるな
63:デフォルトの名無しさん
19/12/15 16:49:35.38 pFDibfNW0.net
ファイル名=publicクラス名.csは一般的
ネームスペース名はそのクラスが属するレイヤーとかコンポーネントの名前
アーキテクチャが整理されてればあんまり迷わないと思う
クラス名=主なメソッド名は状況による
FormatterクラスにFormatメソッドがあるのは自然
Utilitiies > Formatter > Format
64:デフォルトの名無しさん
19/12/15 17:58:43.69 LwtoOKkQd.net
日本語を使った感想
メリット
名称に悩まない(重要)
比較的読みやすい
デメリット
インテリセンスと相性が悪い
imeの切り替えが面倒
大文字小文字がないから名称が被りやすい
システムハンガリアン推奨
他にも何かあった気がする
65:デフォルトの名無しさん
19/12/15 18:23:34.11 yHa/r3w4a.net
プロパティーやフィールドはいいけど、メソッドやイベントの名前は馬鹿っぽくはなるねw
66:デフォルトの名無しさん
19/12/15 18:24:56.51 ltDbPg3S0.net
プロパティはいいとしてメソッドは動詞(+名詞)の形にするの
日本語だと不自然だけどどうしてるのかな
67:デフォルトの名無しさん
19/12/15 18:30:01.27 cmnyuAvp0.net
>>58
中点使ってるせいでC#6.0対応時にエラー吐いたプロジェクトあったわ
68:デフォルトの名無しさん
19/12/15 18:49:58.62 yNhbn0Xna.net
>>54
DBテーブル名/カラム名が日本語名のWindows業務システムで、
Entityクラスや画面コントロールの命名をDBそのまんまの日本語にしたら
ソースが滅茶苦茶読みやすくとても良い感じになった
以後、積極的に日本語で命名するようにしてる
自分の書き方だと、
日本語を使うのは画面項目や業務用語の名詞のみ、動詞は英語
英語とチャンポンして Update利用情報()、Is有効期限内 みたいなメソッド/ブロパティをよく作る
ローカル変数はiとかsとかtとか適当なプレフィクスをつけて無理やりcamelにする
フィールドは_始まり
とかかな
日本語で書くコメントが大幅に減らせてメリット大だと思う
デメリットは…C#関係ないけど
postgresだとテーブル名が日本語だとテーブルエクスポートが出来なくて不便、
多分ASP.NETみたいなWebシステムだと日本語名を使うのはリスク高い、
とか
69:デフォルトの名無しさん
19/12/15 20:10:28.99 KTmzWILYa.net
訳のわからん不具合踏みそう
日本語使ってると
70:デフォルトの名無しさん
19/12/15 21:16:07.17 eTsOryw+0.net
Listについて質問なのですが
BindingList<T>にはToList()では代入できないのでしょうか?
LINQの結果をToListで代入しようと思ってたのですが
型が違うとか出るんです(自作クラスによるListです)
普通のList<T>へならできるのでBindingList固有の問題かと思います
仕方なくforeachで一つずつ代入して一応目的は達成してるんですが
LINQでforeach使わず抽出しておきながら
最後に代入でforeach使うのはバカらしいなあ・・・と思いまして
どうすれば直接LINQの結果をBindingListに入れられるのでしょう?
71:デフォルトの名無しさん
19/12/15 21:26:38.59 ltDbPg3S0.net
new BindingList<Hoge>(fuga.ToList())
72:デフォルトの名無しさん
19/12/15 22:05:28.60 eTsOryw+0.net
>>71
おお!何かわからんけど、できた
初期化したらキャストできるの?
でもdataGridViewのDataSorceプロパティに入れてたのも外れるから
もう一度入れ直さないといけないけど・・・
73:デフォルトの名無しさん (ワッチョイ 57da-boqi)
19/12/16 05:42:00 cXUrIyKd0.net
razor page のコーディングについてなんですが、
1ページのデータ量が多くなれば必然的にソースも長くなりますが、2000行とかになるとごちゃっとして「目に優しくない」ソースになっちゃいます。
目に優しいコーディング方法やら規約やら法則があれば教えてください。
74:デフォルトの名無しさん
19/12/16 07:41:26.07 v/vzDWBs0.net
>>73
1メソッド300行以内っていう社内ローカルルール
75:デフォルトの名無しさん
19/12/16 15:28:44.50 +KWK+mzK0.net
>>73
Partial ViewとかView Component使って分割する
再利用しなくても分割する
個人的には200行超えると黄色信号
>>74
1メソッド300行ってすごいな
76:デフォルトの名無しさん
19/12/16 17:57:20.50 I8DdFnIZ0.net
200も300も大差無いような…
77:デフォルトの名無しさん
19/12/16 20:05:28.74 FR/i0CTk0.net
やっと会社の環境がvisualstudio2010から2019になったわ、これで非同期無双できるw
78:デフォルトの名無しさん
19/12/16 20:08:09.24 X2KrPzv7M.net
そんな環境で2019なんか入れて大丈夫か?
アップデートで不具合引いてダウングレードさせられないように、不用意なアップデートはやめとけよ
79:デフォルトの名無しさん
19/12/16 20:09:20.42 J5g2Edewd.net
2010とかサポート切れ直前やな
80:デフォルトの名無しさん
19/12/16 21:08:24.24 LIM2IbDka.net
2010だとNuGetすら使えないんじゃ
54だけどレスありがとう>ALL
実践してる人もそこそこいるのね
テーブルやカラムを日本語で命名できるのってAccessに限らないのか・・・・
不具合の事例も知りたいけど、具体的に出てきたのは>>67くらい?
C#に閉じた範囲で使うぶんには大丈夫そうかな・・・・今度試してみるよ
81:デフォルトの名無しさん
19/12/16 21:33:12.54 +KWK+mzK0.net
>>76
viewの行数とメソッドの行数の違い
82:デフォルトの名無しさん
19/12/17 09:59:27.04 GVP8bqm50.net
>>80
全角ピリオドとか&とかヤバそうに思えるのは使わないのが無難
date前月末とか昔から使ってます
昔々のACCESSで一部の通常全角文字が使えないとかありましたが、今はもう大丈夫と思ってます
将来的にトラブル可能性はゼロではないとしても、可読性のメリットのほうが遥かに大きい
例えば「要介護認定等基準時間」みたいなのを英字変数にするとかアホにもほどがある
83:ダーク王鍬大使
19/12/17 18:03:06.99 9VuoOKjt0.net
質問でふ(^^
Unityのアセットとか覗いたりするとifは使われてまふよね(^^
Switchが使われているの見たことないんでふが(^^
あれって使っちゃいけないとかってあるんでふか?(^^
ボッキング!(^^
84:デフォルトの名無しさん
19/12/17 18:30:01.62 I793zFiP0.net
最適化すると数行のswitch文はifに自動変換されるんじゃなかったっけ
85:ダーク王鍬大使
19/12/17 18:39:07.95 9VuoOKjt0.net
そうだったんでふか(^^
教えていただき感謝感謝のボッキング!(^^
86:デフォルトの名無しさん
19/12/17 19:40:18.25 vR4SZ06Rd.net
class Hoge{
int Id
ICollection<Hoge> Hoges
}
ってクラスをEntityFramework使ってテーブルにしたんだけど無理だったりする?
Hogeテーブル(Id)と、Gehoテーブル(id、HogeId、HogeId2)後ろ二つ外部キーみたいなイメージなんだけどこういうパターンが調べても出てこない
87:デフォルトの名無しさん
19/12/18 15:34:43.72 bmnVQ6Qnd.net
>>86
この構成じゃ出来ないことが分かったので質問を取り下げます
88:デフォルトの名無しさん
19/12/19 00:36:26.71 TZyBuNxJS
APIでTokenを取得するため、以下のコードを書きましたが、デバッグすら出来ずに摘んでいます。
(ちなみにスクレイピングではなく、正式なAPIサービスです)
先輩方、アドバイスをいただけないでしょうか
var parameters = new Dictionary<string, string>() {
{ "id", "user" },
{ "pass", "password" },
};
const string method = "PUT";
const string endpoint = "URLリンク(apitest)
const string path = "/token";
using (var request = new HttpRequestMessage(new HttpMethod(method), endpoint + path))
using (var content = new FormUrlEncodedContent(parameters)) {
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
request.Content = content;
↓↓ここのresponseがみたいのですが、ステップインできない(プログラム '[12345] 〇〇.exe' はコード 0 (0x0) で終了しました。
var response = await HttpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
return await response.Content.ReadAsStringAsync();
}
89:デフォルトの名無しさん (オイコラミネオ MMab-7F0B)
19/12/19 01:57:08 Ty/KdhcjM.net
webview使ってブラウザ操作してるんですけど、相手がASP使ったサイトだとボタン押したりテキストボックスに文字入れたりって操作は無理ですかね?
90:デフォルトの名無しさん
19/12/19 12:09:36.23 WCM9NoNV0.net
jsonファイルを読んで、木構造を編集して、jsonファイルに出力する
ファイルの入出力はJson.NETを使用
この場合内部のデータ構造はどう持つのがいいでしょうか?
Json.NETのJTokenを使うか、自作するか考えてますが、
標準的な手法は有りますか?
91:デフォルトの名無しさん
19/12/19 12:13:14.10 +iaW+uMUM.net
ちゃんと型を付けてデシリアライズ→加工→シリアライズする
型を付けるまでもないアドホックな処理ならそもそもC#なんか使わずに他のスクリプト言語を使う
92:デフォルトの名無しさん
19/12/19 18:39:36.79 IsJpyVgV0.net
質問なのですが
エンティクラスを配列に入れて使うようなことはできないでしょうか?
数が多いのでループでコードをすっきりさせたいです。
こんな感じなのを
public class test()
{
using (var context = new MyContext(connection))
{
var datalist1 = context.MyEntities1.ToList();
~
var datalist100 = context.MyEntities100.ToList();
}
//以下 共通処理
}
こんな感じで使いたい
string[] MyEntitiesList = new string[100];
MyEntitiesList[0] = "MyEntities1";
MyEntitiesList[1] = "MyEntities2";
~
MyEntitiesList[99] = "MyEntities100";
for(var i =0;i<100;i++)
{
var datalist1 = context.MyEntitiesList[i].ToList();
}
93:デフォルトの名無しさん
19/12/19 19:11:55.40 aq+5Nz0cF.net
var datalist1 =
上書きで良いなら最後のだけ入れろ
94:デフォルトの名無しさん
19/12/19 19:54:28.09 IsJpyVgV0.net
>>93
すまないよくわからないのでもう少し説明をお願いしたい
>>92
こんな感じで使いたいを修正してみました。
string[] MyList = new string[100];
MyList[0] = "MyEntities1";
MyList[1] = "MyEntities2";
~
MyList[99] = "MyEntities100";
public class test(int i)
{
for(var i =0;i<100;i++)
{
using (var context = new MyContext(connection))
{
var datalist1 = context.MyList[i].ToList();
//以下 共通処理
}
}
}
95:デフォルトの名無しさん
19/12/19 20:10:40.73 AGyCFxKvM.net
>>94
92 は for ブロック内部の代入式の左辺が変わってないよ、というツッコミ。
やりたいことは、抽出対象プロパティをテキストで指定してシステマティックにデータ抽出したいってことでしょ?
Dictionary やインデクサで、テキスト => 対象プロパティ or 抽出メソッド、のマップを作って、Reflection か何かで呼び出せばできそうな気がするけど、LINQ to Entities でワークするかどうかは試してみないとわからないな。
96:デフォルトの名無しさん
19/12/19 20:25:17.21 qKbwpXVq0.net
>>94
有益な回答を得るためにもう少し説明が必要かも。
なぜ抽出対象プロパティをテキストで指定する必要があるの?
1 カラムごとに 100 回抽出しようとしているけど、まとめて 100 カラムをワンショットで抽出してから加工するのではなぜダメなの?
また環境が EF6 なのか EF Core なのかも言及した方がいいかもね。
97:デフォルトの名無しさん
19/12/19 20:38:12.29 qKbwpXVq0.net
ごめん、勘違いしていた。
テキストで指定したいのはカラムじゃなくてテーブルなんだね。
98:デフォルトの名無しさん
19/12/19 20:58:33.77 IsJpyVgV0.net
そうですそうです。
データを取り出すところ以外はほぼ変わらないのに
↑のコードだけでも1テーブルの数が多い場合余裕で1万行超えてしまうので
public bool test1()
{
}
public bool test2()
{
}
~~~~
public bool test1000()
{
}
と用意して
test1();
test2();
~~
test100();
を
public bool test()
{
}
for(var i =0;i<100;i++)
{
test( iLop );
}
だけにできないかと思っています。
99:デフォルトの名無しさん
19/12/19 21:00:56.21 IsJpyVgV0.net
>>96
環境はEF Core3.1 です。
100:デフォルトの名無しさん
19/12/19 21:11:26.20 qKbwpXVq0.net
抽出テーブルを動的に指定したいなら、DbSet<T> を返すプロパティが DbContext の派生クラスに定義されていると思います。
型引数 T にテキストは直接指定できないので、その DbSet<T> 型のプロパティをラップするメソッドを定義して、テキストを引数で渡してやればよいのではないでしょうか。こんな感じで。
class MyDbContext : DbContext {
DbSet<MyEntityDataModel1> MyEntity1 { get; set; }
DbSet<T> GetTable<T>(string table) where T : CommonBaseClassOfMyEntityDataModels =>
this.GetType().GetProperty(table) as IQueryable<T>;
}
// 呼び出し側
context.GetTable(“MyEntity1”).ToList();
101:デフォルトの名無しさん
19/12/19 21:54:02.04 qKbwpXVq0.net
>>98
そういう目的ならテーブル名をテキストで指定する必要もなくて、
foreach (var prop in context.GetProperties())
{
var table = (prop as IQueryable<CommonBaseClass>).ToList();
// table に対するテスト処理
}
でよいかもしれない。
ただし下準備として、DbContext の全プロパティのデータコンテナを共通で受ける基底クラス CommonBaseClass を定義する必要がある。
似たようなことはやったことあるのだけど、このコードが手直しなく動くかどうかはわからない。
テスト処理もラムダ式のリストで用意しておいて、各テーブルと Zip() して適用するなど、LINQ を活用するとよいと思うよ。
102:デフォルトの名無しさん
19/12/19 21:59:04.37 WCM9NoNV0.net
>>91
説明が稚拙で申し訳ないです
プログラムはフォームで、木構造の編集とはノードのコピーや削除、値の編集などをGUIで行います
GUIの理由はJSONファイルはあるスマートウォッチのカスタムフェイス用で配置などを確認するためです
自分が知りたい事はc#でよく使われる木構造を扱うライブラリです
103:デフォルトの名無しさん
19/12/19 22:24:53.20 IsJpyVgV0.net
>>100>>101
ありがとうございます。
まだうまく動いていなくて返事遅れました。
100参考にして試してみます。
104:デフォルトの名無しさん
19/12/19 23:07:37.09 IsJpyVgV0.net
>>100>>101
さっぱり動かせそうにない
CommonBaseClassOfMyEntityDataModels
CommonBaseClass
の説明をもう少しお願いできませんか?
105:デフォルトの名無しさん
19/12/19 23:56:40.46 qKbwpXVq0.net
プロパティ DbSet<EntityModel1> MyEntity1 や DbSet<EntityModel2> MyEntity2 の型引数 EntityModel1, EntityModel2 があるとすると、その共通基底クラス BaseEntityModel を定義する必要があります。
class EntityModel1 : BaseEntityModel {} というように。BaseEntityModel は抽象クラスでも可。
そうすると、.GetProperty() の返り値の型が、DbSet<EntityModel1> だったり DbSet<EntityModel2> だったりするのだけど、これが IQueryable<BaseEntityModel> という型で共通的に受けられるということを想定しています。
106:デフォルトの名無しさん
19/12/19 23:58:37.24 qKbwpXVq0.net
訂正。
.GetProperty() ではなく .GetProperties() でした。
107:デフォルトの名無しさん
19/12/20 00:14:57.12 wMdfjBuG0.net
>>105
明日また試してみます。
丁寧に説明ありがとうございます。
108:デフォルトの名無しさん
19/12/20 02:04:01.33 aZ9V3LMHa.net
>>102
よく分からん理屈だなあ
そのスマートウォッチの設定に限らず、世の中のアプリが扱うデータなんて大半は木構造なわけだが、
そいつらがみんな木構造を明示的に扱うようなGUIを持ってるか?
断言するが、明示的に木構造を扱うようなUIが必要なのはフォルダツリーのように再帰的な構造を扱う必要がある場合だけだ
それ以外は必ずもっと適したUIがある
109:デフォルトの名無しさん (ワッチョイ 972d-vnDE)
19/12/20 02:21:20 oj5hMkFq0.net
while文がネストしていた時、階層の奥から一番外側のwhileループまでブレイクするにはどうするのが正しいのでしょうか?
while(true){ while(true){
if(true) 外側のwhileまでbreak;
}}
よろしくお願いします
110:デフォルトの名無しさん (ワッチョイ b763-CWbB)
19/12/20 02:23:20 qHTdS2+z0.net
goto
111:デフォルトの名無しさん (ワッチョイ 9fad-WY45)
19/12/20 03:01:50 1digpYZT0.net
ここでいいのか分からないんですが質問させて下さい。
macでのvisual studioないしはC#の解説の載っているサイト、もしくは操作方法などを教えてください。
つい先日3Dモデリングやゲーム開発に憧れてC#の本を手に取りました。情報系の知識はないに等しく、せいぜい中学の授業レベルです。
「やさしいC# 第3版」を手に進めようとしたのですが、当方macで作業しようとしていたため、本の内容と実際の動きが異なり、四苦八苦しています。
現状なんとかhello worldはできましたが手順が理解できておらず困惑しています。
よろしくお願いします。
112:デフォルトの名無しさん
19/12/20 05:17:47.97 GjFm0fld0.net
>>108
漏れてて申し訳ないです
そのスマートウォッチではノードの記述順によって表示順が決まるので木構造の順番を入れ替えたい
入れ替える枝の深さもまちまちですので木構造を直接編集できた方が良いと思った訳です
また、全てを木構造で扱うのではなく、末端部は類型化されてますのでクラスにして編集の予定です
113:デフォルトの名無しさん (ワッチョイ 1752-R6SS)
19/12/20 07:23:20 NMJ3uqPu0.net
>>107
当初は利用目的がわからなかったため、.GetProperties() やジェネリックで対象を動的に指定して DbSet<T> 型プロパティを呼び出す方法を提案しましたが、
DbContext に MyEntiyty1, MyEntity2, ... と 100 個のテーブルがあり、個々のテーブルに対応した Test1, Test2 ... というテスト関数を地の文で定義しており、
これをシステマティックに対応させたいというのが課題の本質であるなら、実はジェネリックとか使わなくてもできます。
テスト関数 Test1 は DbSet<MyEntityDataModel1> が入力で bool が出力として bool result1 = context.MyEntiti1.Test1() or Test1(context.MyEntity1)
と記述できるように定義されていると思いますが、これを下記のように変形すればよいと思います。
1. MyDbContext を入力として bool result1 = context.Test1() or Test1(context) と記述できるようにテスト関数を書き換える
(Test1 内部の冒頭で context.MyEntity1 と対象を指定する)
2. テスト関数をラムダ式にし、地の文で定義している Test1, Test2 ... というメソッド群をリストオブジェクトにする
List<Func<MyDbContext, bool>> TestList =
new [] { context => { context.MyEntity1 /* ... */ },
context => { context.MyEntity2 /* ... */ }, ... };
3. using ブロック内 for/foreach 文でリストオブジェクトをキックする
using (var context = new MyDbContext())
{
bool result[100];
for (var i = 0; i < 100; i++)
{
result[i] = TestList[i](context);
}
}
114:デフォルトの名無しさん
19/12/20 08:59:06.48 aZ9V3LMHa.net
>>111
ゲーム開発がしたいならUnityを使う
Unityの本を買え
Mac版のVisual Studioは一応あるけど誰も使ってないから本は存在しない
115:デフォルトの名無しさん
19/12/20 19:28:07.00 laM9bMPJM.net
>>111
まずMACを捨てましょう
プログラミングはwindowsでないと、今は良くても後々面倒だと思います
私がゲーム開発してた頃はDirectX使ってました
3Dプログラミングはサインコサインタンジェント使いまくりなので数学の知識がいります
2Dは足し算引き算ぐらいなので初心者でもできると思います
画面にドット絵表示までが鬼門ですがそこ乗り越えられたら楽しい世界が待ってるのでがんばってください!
116:デフォルトの名無しさん
19/12/20 20:00:27.38 FDXklgq8d.net
>>115
MacでもWindowsが動かせるから捨てる必要なし
117:デフォルトの名無しさん
19/12/20 20:09:06.50 wMdfjBuG0.net
>>113
こんな書き方もできるのか勉強になりました。
色々調べて試してみて>>101
をベースにして思ってたように動かせました。
コードすっきりになりました!ありがとうございます。
118:デフォルトの名無しさん
19/12/20 21:29:38.47 qHTdS2+z0.net
そもそもweb周りなんかだとはMacかなり多いのにプログラミングはWinで!なんて発想はどこから来るんでしょうか
2Dであろうと三角関数くらいはガンガン使います
119:デフォルトの名無しさん
19/12/20 21:41:47.69 Vbt2Sjhj0.net
webは簿給でMacのお布施を払っていると
儲けが減ってしまうからですよ
血の繋がりの無いパパさんが見つかると良いですね
120:デフォルトの名無しさん
19/12/20 21:47:02.02 qHTdS2+z0.net
webが薄給ってどこの世界の話?
121:デフォルトの名無しさん
19/12/20 22:22:52.66 tNG2om7pd.net
>>120
ここの世界だよこの世界
122:デフォルトの名無しさん
19/12/20 22:31:48.04 qHTdS2+z0.net
>>121
まじか
同じ世界に住んでるようで違う世界なんだな
金融医療なんかと比べりゃ薄給かもしれんが世間の平均以上はあるでしょ
そら平均ないとこもいっぱいあるし中間搾取が多い部類だとは思うが…
日本は世界的に見てweb系、というかプログラマ自体が安いってのはあるけどそれでも他業種に比べりゃ全然マシだと思うよ
123:デフォルトの名無しさん
19/12/20 23:14:05.81 F92JDOtZ0.net
web系と一括りにしているが>>119が経験した狭い範囲でのことだろう
124:デフォルトの名無しさん
19/12/20 23:56:36.17 laM9bMPJM.net
webは金になるよ
プログラマーの花形だから
求められるスキルは最下位だけども
組み込みプログラマーとゲームプログラマーが最上位
前者はハードの知識も求められるし、後者はプログラムの真髄まで知っとかないといけない
ゲームプログラマー経験してたら、他の分野のプログラマーの仕事はほんと簡単だもん
若い時はムチャやって良かったと心の底から思う
125:デフォルトの名無しさん (ワッチョイ b763-CWbB)
19/12/21 00:37:36 4yldtPmm0.net
webのスキルが最下位ってどこの世界の話?
126:デフォルトの名無しさん
19/12/21 01:32:51.93 Mk9xcjQY0.net
110の者です。反応してくださった方々ありがとうございます。
ひとまずUnityのガイドで勉強してみます。
C#を勉強するなら、現状手元にはmac book airしかないためWindowsを入れるしかないみたいですね…(スペックギリギリですが…)
一応理系なので三角関数自体は大丈夫です。
ちなみにプログラミングの初心者がまず勉強すべきもの、もしくは買うべき本などありませんでしょうか?
場違いの質問で申し訳ありませんが、教えていただけると嬉しいです。
127:デフォルトの名無しさん
19/12/21 01:46:23.53 tKqa0Mcd0.net
最初に読むべきなのは公式チュートリアル
URLリンク(docs.microsoft.com)
URLリンク(docs.microsoft.com)
128:デフォルトの名無しさん (アウアウウー Sa5b-kT4h)
19/12/21 02:36:40 zyAIfpOSa.net
ゲームは知らんけど、組み込みはほんとピンキリだよw
学者みたいに何でも知ってる人もいるけど、狭い範囲のことしか知らないくせに
コード書かせたら構造化以前なんて人もゴロゴロいる
web系は仕事内容は良く知らんけどストレス度は高そうだよねw
なんか俺は最先端のとんがったことやってるんだぞ的な自己陶酔系の人が多いように感じるのは、
そうでも思わないとたぶんやってられないんだろうなと想像
129:デフォルトの名無しさん
19/12/21 05:00:47.48 biYUElkB0.net
>>126
Unityならmacで十分だよ
Windowsでないと後々面倒というのは、会社で使うのはWindowsがほとんどだから
もし仕事にするなら、今から使い慣れてた方がいいということ
開発行為自体だと、unix系のアプリケーションならmacの方が色々揃ってるからやりやすいし
Windowsのアプリケーションなら、当然Windowsがやりやすいよ
130:デフォルトの名無しさん (ブーイモ MMbf-70ba)
19/12/21 08:35:24 elCUYmNmM.net
>>124
オプションとなるスキルが違うだけでプログラミングスキルはどの分野でもピンキリ
131:デフォルトの名無しさん (ワッチョイ 9f52-1WEo)
19/12/21 09:37:34 k+w4ikT00.net
>>124
2Dなら足し算引き算だけなんていってる人が"プログラムの真髄"なんて言っても、自分がやったことある範囲の知識がすべてなんだなって感じで説得力ゼロだぞw
132:デフォルトの名無しさん
19/12/21 12:32:00.35 W85y2T7QM.net
2Dでも三角関数使うしな
133:デフォルトの名無しさん
19/12/21 12:58:47.60 jr0+pgES0.net
プログラムかじった事ない人にいきなり三角関数必要とか言って作れると思う?
3Dは数学の知識が最低減ないと作れないけど、2Dは三角関数知らなくても作れる
分かったような口聞くな
134:デフォルトの名無しさん
19/12/21 13:15:08.24 W85y2T7QM.net
三角関数をなんだと思ってるんだよ
中学生なら習ってないからしょうがないけどさ
135:デフォルトの名無しさん
19/12/21 13:17:44.87 tKqa0Mcd0.net
>>133
>プログラムかじった事ない人にいきなり三角関数必要とか言って作れると思う?
この文章だけで頭の悪さがよく分かる
自然言語でまともな文章書けないやつに
まともなプログラム書けるやつはいない
136:デフォルトの名無しさん
19/12/21 13:31:19.22 B9cNmAcsd.net
三角関数なしに2Dゲームを作ることはできる
数学知識なしに3Dゲームも作れる
流石に加減乗除くらいは必要だが
無くても何かは作れると何を作るにも不要かどうかは別の話
137:デフォルトの名無しさん
19/12/21 17:01:18.37 jr0+pgES0.net
>>136
ほうー
3D空間を数学の計算以外でどうやって動かすのかな?
キャラクター動かないゲームかな?
138:デフォルトの名無しさん
19/12/21 17:06:21.58 ToibKenqa.net
下らない話はそのぐらいにしておいたら?
中学生じみてるよw
139:デフォルトの名無しさん
19/12/21 17:12:20.47 3iZbeqQ/0.net
Unityなんかに任せるとか?
結局使うことになるとは思うけど、使わずに済まそうと思えばなんとかなると思う。
140:デフォルトの名無しさん
19/12/21 17:20:19.27 722GI/wM0.net
テンプレ読んでください
オイコラミネオ MMab-7F0B
ワッチョイ 7707-7F0B
NG
141:デフォルトの名無しさん
19/12/21 18:47:28.86 BGAOi6L9M.net
オレのミネオはどう表示されるんだろ…
142:デフォルトの名無しさん
19/12/21 19:03:45.63 qQirr//DM.net
おれもテスト
143:デフォルトの名無しさん
19/12/21 21:45:23.13 /91O1xjY0.net
C#でコルモゴロフスミノフ検定した上で、単回帰分析とかするライブラリってありますか?
統計解析するならテキストファイルにデータ書き出して、
PythonとかRにわたすほうがいい?
144:デフォルトの名無しさん
19/12/21 21:47:47.94 q7cBKLSTd.net
>>143
そこはRubyでしょw
145:デフォルトの名無しさん
19/12/21 22:46:57.61 jv2HuDh00.net
>>143
R.NET
146:デフォルトの名無しさん
19/12/22 00:25:07.44 7hF/cDg80.net
byte[]として受け取ったmp3をファイル化せずにそのままmp3tagの読み書きを行えるライブラリはないでしょうか?
出来る限り通信のやり取りだけで済ませたいため、受け取ったmp3バイナリをそのまま処理して受け流したいと考えています。
taglibは試してみましたが、FileStreamとして渡さないと上手く機能しないようでした
147:デフォルトの名無しさん
19/12/22 00:38:07.26 GX5OjjKF0.net
Streamクラスとして抽象化されてるんじゃないの?
taglibは入力にStreamを受け入れんじゃなくて、FileStreamというより具象的な入力を受け入れるような馬鹿な設計になってるの?
byte[]をMemoryStreamでラップして渡せないの?
148:デフォルトの名無しさん
19/12/22 00:58:17.93 GX5OjjKF0.net
俺が馬鹿だったかも。書き込みも必要か。
URLリンク(docs.microsoft.com)
リサイズ可能なメモリストリーム作れるかこれ?
作れないなら、変更できるようなインメモリの独自ストリームクラス作るとか。
149:デフォルトの名無しさん
19/12/22 02:10:14.34 LPMS/GLqa.net
ビットマップを編集するライブラリがFileStrem前提になってたら馬鹿設計だけど
Exifを編集するライブラリがそうでも別に馬鹿とは思わないなあ
150:デフォルトの名無しさん (ワッチョイ 7790-MEwc)
19/12/22 04:41:32 GX5OjjKF0.net
まじで言ってる?
例えば、カメラで撮影したローカルにあるJPEG画像を投稿サイトにアップロードする機能つくるとき、EXIFを消してアップロードしたいありがちな機能。
MemoryStreamを渡せれば、元のファイル変更せずにメモリ上で修正してアップロードして破棄できる。
同じことをやるにはFileStreamだと一々コピーしないといけない。
151:デフォルトの名無しさん
19/12/22 05:57:32.35 R0LOzgYE0.net
タグ部分と同じ構造体作って該当部分のバイト配列を構造体に変換すりゃ済むんじゃないの
152:デフォルトの名無しさん
19/12/22 08:25:01.65 /NGpR+eY0.net
TaglibSharpの.net Standard版をUWPから使っているが
TagLib.File.IFileAbstractionってのを使ってストリームを操作している
自分でこのインターフェースを実装すれば割と簡単に行けると思うよ
実装してクラスをTagLib.File.Createに渡せば問題ない
153:デフォルトの名無しさん
19/12/22 12:48:45.77 d/zyo53Ma.net
>>150
それ、別にFileStreamを受け取ってStreamを吐く仕様で何も困らないのでは?
154:デフォルトの名無しさん
19/12/22 13:18:15.55 7hF/cDg80.net
>>147>>152
ありがとうございます。
IFileAbstractionを実装したクラスでCreateしていましたが、CloseStreamで内部のMemoryStreamをDisposeしてしまっていたため、挙動がおかしくなっていただけでした
TagLib.File.Save()を行うことで初めて内部のstreamにTag情報が書き込まれ、同時にCloseStreamも呼ばれるためそこでは内部のstreamを閉じずに自前の後処理を行ってから閉じることで希望の動作になりました
155:デフォルトの名無しさん
19/12/22 16:13:05.02 thbQEK090.net
ヽ(・ω・)/ズコー
まあ、バグ調べてて「俺ってバカ?」って思うことはよくあることだ
バグ作り込む気は全く無いのに、毎度あるのは何でか不思議でならない
(まあ最近は熟知してない言語で作ることが増えてきたのもあるが、COBOLごときでも一緒だったな…)
156:デフォルトの名無しさん
19/12/22 22:16:50.41 TCqgMSVE0.net
ライブラリを作ろうかと思うのですが
あるクラスをライブラリ内ではインスタンス化できるようにしたいけど
ライブラリを使う人はインスタンス化できないようにする
というようなことは可能ですか?
参考になるサイトなどありますか?
クラスのプロパティは基本的にすべて読み出しだけ可能にする予定です。
157:デフォルトの名無しさん
19/12/22 22:22:55.94 CUDsNTIh0.net
コンストラクタをinternalにする
158:デフォルトの名無しさん
19/12/22 22:28:00.73 t9cAONDx0.net
>>153
じゃあさあ。ネットワークから受け取った画像をファイルに保存せずに、そのまんまEXIF修正して別のサーバーに送り返す場合、どうするの?
と、使う方次第で色んな用件があるわけ。
実装コスト増えるならまだしも、今回のケースでは読み書きできてシークできるStreamであれば良さそうなのに、それをFileStreamに限定するの意味がわからない。
159:デフォルトの名無しさん
19/12/22 22:37:29.12 b8EKEEl60.net
この動画の人がVisual StudioでやっているAuthenticatonをオンにする設定は、dotnetコマンドではどうやるのですか?
URLリンク(youtu.be)
160:158
19/12/22 22:45:45.81 b8EKEEl60.net
すまん
自己解決しました
URLリンク(docs.microsoft.com)
161:デフォルトの名無しさん (ワッチョイ 7f0d-9COd)
19/12/23 02:14:36 CbUt8X2i0.net
c#からpythonのmatplotlibを呼んでみたらグラフ描画に10秒くらいかかった・・・
めんどくさい数値演算とかをPythonライブラリに丸投げしたかったけど厳しい
グラフ描画はwinformでやるにしても描画するための連続データを戻り値として受け渡しするのなぁ
162:デフォルトの名無しさん
19/12/23 06:05:21.41 n/5EZXjd0.net
>>161
chartじゃだめか?
163:デフォルトの名無しさん
19/12/23 06:33:23.54 TTdlQikFd.net
>>157
ありがとうございます。
難しく考えすぎてました。
164:デフォルトの名無しさん
19/12/23 08:20:32.39 AV2OtNnH0.net
>>161
その程度の何が障害なの?
ナメてるのか?
165:デフォルトの名無しさん
19/12/23 09:06:54.33 5ISBodU5M.net
>>164
食ってかかるなよ
>>161
ふーん。日記ならママにでも聞かせとけよ
166:デフォルトの名無しさん
19/12/23 14:12:00.92 CVji7Zdt0.net
自分で使う用のWinデスクトップアプリケーションを作ってみたいのですが
VScodeにC#の拡張をインストールしたところ、".net Coreが無い"というメッセージが出ました
.net frameworkを後から入れるつもりだったのですが
現在はframeworkではなくCoreを使用するのでしょうか?
軽くしらべたところ、Coreはサーバサイ用、frameworkはデスクトプ用っぽいんですが
Coreでデスクトップアプリを作成するチュートリアルもあるようでした
167:デフォルトの名無しさん
19/12/23 14:29:00.57 FZMFlrDL0.net
coreはサーバー用ではないよ
今ならデスクトップアプリでもcoreで作るけど別にframework使えないってわけでもない
古い環境への配慮とか考えなくていいならcoreでいいんじゃない?
168:デフォルトの名無しさん
19/12/23 15:12:57.52 Gp3oh3j2M.net
そして System.Drawing の移植性の無さで
泣ける。
169:デフォルトの名無しさん
19/12/23 15:38:13.00 Wyd1VJ4y0.net
WebBrowserでカスタムHeaderの送信とResponse Headerの取得ができません
.net core 3.1を使っています。バグでしょうか?
170:デフォルトの名無しさん
19/12/23 15:46:22.84 CVji7Zdt0.net
>>167
ありがとうございます
Core入れてきます
171:デフォルトの名無しさん
19/12/23 17:45:51.26 eQmrU5ERd.net
>>170
そのレベルだと、VSCodeでxaml手書きはキツいんじゃない?素直にVisual Studio使いな
172:デフォルトの名無しさん
19/12/23 18:05:28.45 oBvZW+b7M.net
今ならBlazorが簡単で良いよ
一般常識レベルのHtmlがわかってれば後は直感で作れる
173:デフォルトの名無しさん
19/12/23 18:16:31.10 +KUE/8IiM.net
C#使いたがる人ってWebに苦手意識がある人が多い印象だなあ
最初からrazor使えるような奴はそもそもC#(というかWindows開発)を選ばないと思うよ
174:デフォルトの名無しさん
19/12/23 18:22:36.62 P6gAM1Rw0.net
嫌ぁCAD+画像処理屋なので、webじゃ
やっとれんだけですよ。
SPIDERがwebに乗って実用化されたら
考える。
175:デフォルトの名無しさん
19/12/23 18:28:43.48 +KUE/8IiM.net
ほらね
176:デフォルトの名無しさん
19/12/23 18:44:33.92 kZpvALBe0.net
>>173
お前はC#スレに来て何がしたいんだ?
177:デフォルトの名無しさん
19/12/23 19:08:35.91 kDR2U+EyM.net
なにがほらねなんだろ
178:デフォルトの名無しさん
19/12/23 19:10:12.11 P6gAM1Rw0.net
法螺ね
179:デフォルトの名無しさん
19/12/24 11:17:43.39 pJ4JfZbNd.net
prism の質問もここでいいですか?
180:デフォルトの名無しさん
19/12/24 11:23:10.23 rY4O3lLw0.net
許すん
181:デフォルトの名無しさん
19/12/24 11:27:15.31 4hGbK3LLM.net
今のprismはMSとは無関係な単なる野良ライブラリの一つだからダメ
182:デフォルトの名無しさん
19/12/24 12:29:36.63 2vtH2tiGd.net
>>179
C#で使うならOK
183:デフォルトの名無しさん
19/12/24 12:45:35.02 +zwswjcb0.net
skiasharp Microsoftの純正ライブラリー
扱いなのに(nugetでは)
情報が少なくて笑える
人脈が無いとこういう扱いなのかw
184:ャfフォルトの名末ウしさん
19/12/24 13:55:17.48 rY4O3lLw0.net
流れ読まずに。
private int hoge(){
using(/* なんか入る */){
/* ひたすら処理 */
return nanka;
}
}
こういうreturnの書き方は一般的なのでしょうか?
usingの中カッコの外にreturn文がないと値の返し損ねがないか心配なのですが
VisualStudioの警告は出ないしアリなのかナシなのか諸兄のご意見をいただきたく。
185:デフォルトの名無しさん
19/12/24 14:15:20.75 4hGbK3LLM.net
>>184
普通にアリ
メソッドから戻る直前にDisposeが実行される
なお、C#8以降では以下のように書けるため、従来のusingブロックはほとんどの場合必要なくなった
using var x = new Hoge("Arial", 10.0f);
x.Foo();
// メソッドを抜けるときに自動的に x.Dispose が呼ばれる
186:デフォルトの名無しさん
19/12/24 14:42:06.62 JGZzQNV20.net
>>184
returnが無いパスがあったら警告出るよ
警告が出ないということは必ずreturnが呼ばれている
187:デフォルトの名無しさん
19/12/24 16:17:46.84 pJ4JfZbNd.net
>>182,180
ありがとう。DIコンテナにUnityを使ってて、App.xaml の RegisterTypes で RegisterSingleton で登録する共用クラスがあるんだけど、このコンストラクタに引数を渡したいです
UnityContainerの中で生成するタイミングがわからなくて渡し方がわかりません
188:デフォルトの名無しさん
19/12/24 16:20:01.66 pJ4JfZbNd.net
あ、引数はユーザーコンフィグから取得したいです
189:デフォルトの名無しさん
19/12/24 17:24:40.68 rY4O3lLw0.net
>>185,186
ありがとうございますm(_ _)m
usingの中カッコの中で変数宣言してそれを返せて終われたらいいなと思ってたのでこの書き方でやってみます
190:デフォルトの名無しさん
19/12/24 19:00:31.16 yk68HN8sM.net
>>188
コンフィグクラスかコンフィグ読み込みクラスを注入すればいいよ
191:デフォルトの名無しさん
19/12/24 19:05:38.59 0ojb25IiM.net
>>185
まじ?C#は洗練されてるね
192:デフォルトの名無しさん
19/12/25 00:57:35.17 BOYk9T8B0.net
>>190
ああそりゃそうか。DIコンテナがあるんだからインジェクションすればいいだけなんだねありがとう
193:デフォルトの名無しさん
19/12/25 21:07:41.04 nysCvhr10.net
.netライブラリでかすぎじゃね?
194:デフォルトの名無しさん (ワッチョイ f12d-vQnI)
19/12/26 03:51:48 bzjIw0U90.net
作ったプログラムをUbuntuのバックグラウンドで動かし続けたいんだけどさあ
nohup dotnet run &
だと、動かないのかすぐ終わっちゃうのかわかんないけどダメだったぜ
どうすればよかんべえな?
195:デフォルトの名無しさん
19/12/26 09:37:04.58 qmNoWNu8F.net
>>193
既にライブラリじゃないですね
196:デフォルトの名無しさん
19/12/26 10:09:04.01 Wx+k6OqqM.net
>>194
Docker使うのが簡単だしスキル的にも得るものが大きい
197:デフォルトの名無しさん
19/12/26 22:14:19.89 z0a0esehd.net
>185
1000行近い関数が沢山あるクソコードだと以前の方が便利だな(涙目)
198:デフォルトの名無しさん
19/12/26 22:19:53.43 YRIJALUmM.net
メソッド内にラノベでも書いてんのか?
199:デフォルトの名無しさん
19/12/27 23:38:38.82 rZaePzzs0.net
頻出パターンだと思うんだけど、
ツリービューとかデータグリッドを選択したら詳細を表示する画面で、詳細部分のリジョンにナビゲーションで登録する時って、
詳細のビューのコードビハインドに書くしかないのかね。
サンプルがそうなってるけど、コードビハインドに書くのに抵抗がある
200:デフォルトの名無しさん
19/12/28 00:09:08.65 L8M+Vbvra.net
React等の仮想DOMを使ったモダンなMVVM系Webフレームワークでは、コンポーネントとしてVMを階層化する。
この場合、親VMが子VMとしてツリービューVMと詳細VMを持つ形になるだろう。
そして、ツリービューの選択項目が変更されたらツリービューVMがそれを受けて親VMに通知し、親VMが詳細VMの表示対象データのプロパティを更新する。
WPFの原始的なMVVMではそのへんはあまり洗練されていないし、そもそもWPF自体誰も使ってないから特にベストプラクティスのようなものも無い。
WebのMVVMを真似するのもコードビハインドを書くのも君の自由だ。
201:デフォルトの名無しさん
19/12/28 02:11:10.25 n5/LKlnD0.net
「リジョンのナビゲーションで登録」
意味不明
202:デフォルトの名無しさん (ワッチョイ 3538-n2a0)
19/12/28 04:17:29 j+kocMTA0.net
「詳細部分のregion(領域)」までは何とか…
203:デフォルトの名無しさん
19/12/28 11:25:47.63 aAyiCa3V0.net
>>201
ごめんなさい。モジュールでレジスタービューウィズリジョンじゃなくて、レジスターフォーナビゲーションを使って登録するとこのことです
公式サンプルのベーシックリジョンナビゲーションの書き方をみての質問です
204:デフォルトの名無しさん
19/12/28 11:47:20.50 j+kocMTA0.net
クソワロタ
205:デフォルトの名無しさん
19/12/28 11:53:28.80 mKsVnGCZ0.net
そうか、よくわからないけど解決したなら良かった