X



ふらっと C#,C♯,C#(初心者用) Part140
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (ワッチョイ 9e9f-LwdJ)
2018/10/04(木) 18:56:38.41ID:JnxMNCXd0
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part139
https://mevius.5ch.net/test/read.cgi/tech/1533466544/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
0002デフォルトの名無しさん (ワッチョイ e9c9-vBoO)
2018/10/04(木) 23:05:26.82ID:qWTjGweS0
ネットワークやバイナリファイル編集でバイト配列操作する機会多いんだけど、何を使うのが一般的なの?
StreamにしてBinaryReaderやBinaryWriterで読み書きしてたら、バイト配列は添字使って編集するのが速いし確実とかCみたいなプログラム書くおっさんPGに言われちゃった・・・
0003デフォルトの名無しさん (ワッチョイ ce9a-GiWE)
2018/10/04(木) 23:23:18.76ID:qbe854ro0
>>1

>>2
用途によるし「確実」はちょっと意味がわからないけど構造体のように複数の長さのデータを格納・読込するのならそれでいいんじゃね?
1byteごととか任意のバイト長さとかファイル単位なら
https://dobon.net/vb/dotnet/file/filestream.html
でその人の言うように配列のインデックス使ってやればいいと思うし
0004デフォルトの名無しさん (アウアウウー Sa83-MQj3)
2018/10/04(木) 23:31:36.71ID:58olDMZFa
>>2
同じく「確実」の意図が分からないからそれは置いておいて
byte配列のほうが速いのは確か
ただしネットワーク通信やファイル入出力の所要時間と比べれば微々たる違いだろうから
先頭から順に読み書きできればいいならBinaryReader/Writerで、
ランダムアクセスしたいならbyte配列で操作すればいいと思う

StreamでもPositionやSeek()で位置を動かせるけどあまり見ない気がする
0005デフォルトの名無しさん (アウアウウー Sa08-Ww/X)
2018/10/04(木) 23:46:55.97ID:aAHFTiw7a
>>2
C#の最新事情でいうと、Span<T>という安全なポインタのようなものが入ったり、
それに伴ってBinaryPrimitivesみたいな低レベルなユーティリティが充実したりして、
残念ながら時代はCおじさんの方にある
0007デフォルトの名無しさん (ワントンキン MM1a-LjNM)
2018/10/05(金) 09:06:50.59ID:LGlJpP21M
C#という事ではないのかもしれませんが相談させてください。

複数のPCで複数のアプリが稼働していて、これらの稼働状態をモニタリングしたいと考えています。
正常に動作しているか、今どういう状態か程度で、止まっていたりしたら知りたいです。

各アプリから状態をDBに都度登録してもらい、それを監視すればいいかとも思うのですが、
この方法だとアプリが正常に動作していない場合とかは、DBの更新が止まっているのを判断するしかありません。

このような案件の場合、よい方法、定番の方法ってあるでしょうか?
0010デフォルトの名無しさん (スフッ Sd94-3Vr4)
2018/10/05(金) 12:25:06.26ID:3Syb0Y7Yd
>>7
正常に動作していない、を判定するのは無理だよ。
正常に動作していなかったら、「正常に動作できてません」って発言すら信用できないっしょ。
素直にアプリ側にたとえ報告することがなくても、忙しくても何が何でも一定時間おきに「動作中」を送信させて、DBには時間とともにそれを記録して、
確認側は最後の時間から一定時間過ぎても更新が無いことを確認するしかないと思うよ。
0013デフォルトの名無しさん (アウアウエー Sa6a-u7Me)
2018/10/05(金) 18:47:24.33ID:Ch2NTSqba
もともとDBに何か記録するのがそのアプリのお仕事ならともかく、
そうでないなら何でわざわざDBにって印象は受けるなあ

まあ、何か事情はあるんでしょうが
0015デフォルトの名無しさん (スプッッ Sd9e-RpCj)
2018/10/05(金) 20:17:35.38ID:N/cJ9waZd
一般的とか定番とかにこだわりすぎ
君のシステムにあったものを選択すればいい
すでにシステムとしてDBを利用してるなら、その横で正常動作を監視するのには何の違和感もない
0016デフォルトの名無しさん (アウアウエー Sa6a-u7Me)
2018/10/05(金) 20:29:12.88ID:A3z1jwkNa
>>14
いや、監視役のPCの監視用のアプリが直接各PCのアプリに確認するとか、
逆に各PCのアプリが定期的に報告するとか、そっちの方が回りくどくないんじゃないかと思っただけ。

だから直接通信できないとか何か事情があるのかなと
0017デフォルトの名無しさん (ワッチョイ bc06-LjNM)
2018/10/05(金) 23:36:46.57ID:hL15zPdp0
>>16
なるほど、確かにそうですね。
ソケット通信みたいなプロセス間通信でって事でしょうか?
時間の関係で監視アプリはまだ未定で、取り敢えずネタを仕込む仕組みだけは考えておこうと言う思いでDBが浮かんだんでしょうか。
0018デフォルトの名無しさん (アウアウウー Sa08-Ww/X)
2018/10/06(土) 01:17:30.44ID:GDCWtS3pa
それこそZabbixなどの監視スイートでいいだろ
サーバーとクライアントに出来合いのフリーソフト入れるだけで、このスレの連中が10年かけても作れない立派な監視システムの出来上がり
0023デフォルトの名無しさん (ワッチョイ 968a-XM+q)
2018/10/07(日) 04:08:03.95ID:VK7xOYMb0
他のPCの共有フォルダの内容を表示したいのですが、どうやってIDとパスワードを使って接続すればよいのでしょうか?
0031デフォルトの名無しさん (ワッチョイ e2d2-pJhu)
2018/10/08(月) 02:16:46.72ID:fwPk56zX0
>>26
過去のしがらみがないので
(ちょっとはあるけど)
良い進化ができる
0036デフォルトの名無しさん (ワッチョイ d0e8-vBoO)
2018/10/08(月) 08:47:31.14ID:BjxsuyVh0
Javaはレガシィと言われる時代か
0038デフォルトの名無しさん (ワッチョイ 967f-fb/i)
2018/10/08(月) 10:31:33.47ID:I6BtkXxw0
パラダイムが同じならどの言語でも大差ないだろ
どうせ複雑な機能は使わない
複雑にならないように設計して実装するのが腕の見せ所でござろうよ
0039デフォルトの名無しさん (ワッチョイ 671e-HFxR)
2018/10/08(月) 10:35:09.02ID:jzUSomae0
まぁ、ラピッドリリースになった最新のJavaならラムダに始まってvarによる型推論もできるようになったり結構ストレスなく使える。
後はProject panamaやヴァルハラ?などのvaluetypeやら。コルーチンやasnc/awaitやらが来れば後10年は戦える。
プロパティも欲しいとこだが今さらこれは望み薄だろう。
0041デフォルトの名無しさん (アウアウウー Sa08-Ww/X)
2018/10/08(月) 11:59:18.45ID:3oh/BVONa
C#は7.xで参照が強化されて超複雑になったよ
低レベルなタスクに関わる一部の人だけが知っていればいいと思われがちだが、実は決してそうではない
最新のBCLには従来は配列とインデックスをセットで渡してたメソッドに軒並みSpan<T>のオーバーロードが追加されていて、早くも第一級の扱い
今後は新規APIについては基本的にSpan<T>のみをサポートするようになるだろう
0043デフォルトの名無しさん (ワッチョイ 509f-x2yO)
2018/10/08(月) 14:25:57.34ID:7WquQluz0
正直なところ聞きたいのだけどEFって業務システムで使える?
小規模のWebサービスのプロトタイピングにはイイかなーと思うけど大規模にも耐えうるのかな
0044デフォルトの名無しさん (ブーイモ MM5e-Ww/X)
2018/10/08(月) 14:44:04.44ID:QmlHMP6PM
EFはモデルの一貫性を強力に維持しながら継続的にモデルに手を入れていくような開発スタイルに適してる
巨大な単一のデータモデルを維持するようにはできてない
大規模開発でEFなら適切にドメインを分けてやらないとスケールしないよ
0045デフォルトの名無しさん (ワッチョイ 968a-XM+q)
2018/10/08(月) 17:44:43.35ID:ejHrcIFn0
2つのPC間でデータ送受信を行う際、現状はデータの最後に"<EOF>"を付加してファイルの末尾であることを通知しています。
これをなくして、送信側がデータの最初にデータサイズを明記し、受信側はそのサイズだけデータを受信したら受信完了という処理に変更しようと思うのですが、
みなさんの経験則的にはこれは悪手でしょうか?
0049デフォルトの名無しさん (アウアウエー Sa6a-u7Me)
2018/10/08(月) 18:41:57.27ID:ikezuOk7a
>>45
申し訳ないけど全体的に何を言ってるのかよく分からないけど、
現状データ長を含まないってことは必然的にデリミタで区切る文字列ベースの
メッセージってことになると思うけど、そういうこと?

それならむしろ何のためにデータ長を含めたいのか分からない
送る方のコードも面倒が増えるだけだし、万が一データ長が間違ったメッセージが
送られてきたら後まで引きずっちゃうと思うけど
0050デフォルトの名無しさん (ワッチョイ ba99-3Vr4)
2018/10/08(月) 18:56:25.00ID:Py80K8TM0
データ長が狂う環境なら、何かがEOFになったり、EOFが何かになったりする可能性を潰すほうが大変じゃないか?
化けにくくてチェックもしやすい、データ長を渡すほうが良いと思うよ。
0053デフォルトの名無しさん (ワッチョイ 72c3-DRaL)
2018/10/08(月) 20:46:47.49ID:nA3KYx400
受信インターバルタイムアウトってのもあるな。

例えば9600bpsの場合、ざっくり1文字送るのに、
パリティとエラー含めて11ビット位だったかな。
めんどくせーから16ビットで1文字送ったとして、
1000[ms]÷9600[bps]×16[bit]で、1.66666…[ms]。
2文字無通信時間で打ち切るとして、約3.2[ms]の間、文字が来なかったら、そこで通信を打ち切る。

C#でそこまで精度でるか知らんけどな
0055デフォルトの名無しさん (ワッチョイ 6ee3-BBJl)
2018/10/08(月) 21:49:06.47ID:kgyl4Ui40
>>52
ケースバイケースだよね
どういう方式っつかタイムアウトで全ての辻褄を途中でリセットする仕組みがあって実際に復帰できるか?
が重要
大手の試験もそういうのが多い

asioとかタイムアウト設定できなくてクソ過ぎて死んだけど
0056デフォルトの名無しさん (ワッチョイ aab3-GL8C)
2018/10/08(月) 21:51:03.18ID:sIA/07pT0
>>53
> パリティとエラー含めて11ビット位だったかな。
エラーってなんだよ w
8ビットデータを調歩同期で送るなら
スタート(1) + データ(8) + パリティ(1) + ストップ(1〜2)
だから11〜12ビット/フレームだな
てか、今どきシリアル通信じゃなくて独自プロコトル + TCP/IPとかじゃないかな
0058デフォルトの名無しさん (ワッチョイ 3c19-vBoO)
2018/10/08(月) 22:23:12.19ID:JzRq+M5U0
例えば下限が-10、上限が10として、
上限がくるまではずっとインクリメントして、
上限到達後、下限がくるまではずっとデクリメントするような、
数値間で折り返しを続けるプログラムを考えてみました。

https://ideone.com/LVqCtz

↑これだと上限に達したか、下限に達したかのフラグや
それを判定する箇所がスマートではない気がするのですが、
よりよい方法をお教えいただけないでしょうか
0062デフォルトの名無しさん (アウアウエー Sa6a-u7Me)
2018/10/09(火) 00:09:25.69ID:7r5/ETxRa
>>58
ベタに書くのが一番でしょ
難しく考えるのも変な技巧を凝らすのもよくない
IEnumerable<int> AlternatingSequence()
{
  const int min = -10;
  const int max = 10;
  for (;;)
  {
    for (int i = min; i < max; i++) yield return i;
    for (int i = max; i > min; i--) yield return i;
  }
}
0069デフォルトの名無しさん (ワッチョイ 84b3-bwKK)
2018/10/09(火) 18:39:44.42ID:CLgat4sk0
情報処理試験の勉強をしていてセマフォというものを知ったのですが、C#の実務で使うシチュエーションはあるでしょうか?

いつ使うのかなと疑問に思いまして
0070デフォルトの名無しさん (ブーイモ MMed-Ww/X)
2018/10/09(火) 18:46:58.59ID:iDNploc3M
使わないよ
ドカタ現場で使っても誰も理解できないだろうし、業務アプリのアプリケーションコードのレベルでそんな細かい排他制御が必要になることはまず無い
普通にロックすればよい
0072デフォルトの名無しさん (ワッチョイ ee9f-GiWE)
2018/10/09(火) 19:37:27.51ID:2+Q7pYPf0
WindowsFormでテキストボックスのスクロールバーを切り離したいのですが
テキストボックスとは別に配置したVScrollBarをコントロールの
スクロールバーと連動させるにはどうすればいいですか?
スクロール位置については調べて出てきた物を弄ればいけそうなのですが、
長さをどこで読めば良いのかわからず……

用途としてはテキストの折り返し位置を数値指定したくて無理矢理実装した状態です。
テキストボックスのサイズ自体を変更し、ワードラップを利用して無理矢理テキストの折り返しを作ってるので
テキストボックス自体のスクロールバーは隠してしまって
目に見える場所に操作用のスクロールバーを置きたい具合です。

Textboxをオーバーライドしてテキストの表示領域そのものを弄る事ができるなら
そちらのほうが理想なのですが、自分ではどこをどう弄ればいいのかわからず……

よろしくお願いします。
0075デフォルトの名無しさん (ワッチョイ ee9f-GiWE)
2018/10/09(火) 19:53:44.82ID:2+Q7pYPf0
>>72
すみませんPaddingとか右余白で散々ググって出てこなかったので
無いものと思い込んでたんですが>>73を見てプロパティ漁り直したら
普通にRightMarginを発見して解決して顔真っ赤にしてるので無かった事に……
俺の半月はなんだったんだ…………

スレ汚し失礼しました!!
0076デフォルトの名無しさん (ワッチョイ ee9f-GiWE)
2018/10/09(火) 19:58:09.84ID:2+Q7pYPf0
>>74
スクロール位置はそのページとかで沢山サンプルがあるのですが
スクロールバーの長さを連動させる方法が分からなかった具合です……!

結果そんなことをする必要はなかったのですが
色々応用が利きそうなので今後のために知っときたさはあります……
0080デフォルトの名無しさん (ワッチョイ d09b-RpCj)
2018/10/10(水) 23:35:14.94ID:DLFqb8zL0
VBA上がりでC#勉強中なんですが、
別クラスに書いたコードを使いたい時、
○○ △△ = new ○○を記述して使ってるんですが、form Loadとかchangeイベント等で復数回登場する時でも都度使う所の近くで書いた方がいいんですか?それとも上部のpublicの所に書くのがいいんですか?
0083デフォルトの名無しさん (ワッチョイ 67b3-9sSg)
2018/10/11(木) 07:18:56.97ID:8Foxk2RW0
namespaceまで作ってプログラムしたことが無いのですが、プロは駆使するのが普通なのでしょうか?

アニマルインタフェース実装した猫クラスと犬クラスを人クラスがメッセージ出して鳴かせるレベルの超初歩設計しかした事無いので、どこでnamespace使うのかなと悩んでおります
0087デフォルトの名無しさん (ワッチョイ ffeb-JlWZ)
2018/10/11(木) 14:06:58.98ID:sbec5Ilz0
JavaをやっていてJavaらしいコードを書ける人は大勢いるだろうけどさ
C#らしいコードを書ける人って、C#でプログラミングをしてる人の1割もいないんじゃねえのか?
0090デフォルトの名無しさん (アウアウエー Sa9f-NVVT)
2018/10/11(木) 16:52:44.52ID:lOIGtRbea
>>80
>それとも上部のpublicの所に書くのがいいんですか?

と書いているので、質問の意図はメソッド内の変数の宣言や初期化の位置についてではなく、
同じクラスのインスタンスを複数のメソッドでnewして使ってる時に、
これをローカル変数ではなくフィールドにした方がいいのか?ってことじゃないのかな。

そうであるなら答えはNo。
フィールドにしなくても要件を満たせるものをフィールドにしてはいけない。

何にしても、質問は意図が分かるように書いて欲しいね。
0094デフォルトの名無しさん (ワンミングク MMbf-s6iV)
2018/10/12(金) 09:49:30.31ID:+DY7sdXwM
W indows Fromアプリを作っています。
途中でアイコンを変更しました。Formプロパティ部分とプロジェクトのプロパティ-アプリケーションのアイコンの2か所です。
実行時のFormとエクスプローラでも詳細表示は変更後のアイコンになるのですが、エクスプローラでの大アイコンやショートカット、ドラッグした時のアイコンが古いままです。
どうすれば新しいアイコンに更新できますか。
0095デフォルトの名無しさん (ワッチョイ 27f2-7Kxw)
2018/10/12(金) 11:01:50.14ID:4rHGu3Q90
一度Windows標準のアイコンに戻して
再度新しいアイコンを選択してSaveしてから
再起動すれば更新されてない?
0101デフォルトの名無しさん (ワッチョイ 272b-JlWZ)
2018/10/12(金) 16:30:01.41ID:arkneguz0
質問ですが
デバッグ構成でのexeとリリース構成でのexeは
デバッグ情報が邪魔する分、デバッグexeの方が遅いという話は知っていましたが
「微々たるもんだろ」とあまり気に留めてませんでしたが
それが原因と思われる現象に当たりまして・・・
デバッグは問題無く通るので実行すると、データが混雑すると固まるのです
試しにリリース構成のexeにしたら問題無く動きます
どうやらデリゲートのBeginInvokeを使っているので
非同期処理になりタイミングずれにデバッグ情報が相まって固まってるようなんだけど
こういう場合
「リリースexeで問題無いならいいじゃん!」なのか
「いやいや、タイミングがずれるとエラーが出る可能性があるなら対処しておくべき!」なのか
どうなんでしょうね?
0103デフォルトの名無しさん (ワッチョイ bf8a-4Hut)
2018/10/12(金) 16:42:13.45ID:qSk0EFmG0
Html Agility Pack を使ってHTMLのスクレイピングをしているのですが、
↓のソースだと<h1>タグが存在していないとNULLエラーになります。
Try Catch を使わないでエラーを出さずに済む方法ってありますか?

       // Html Agility Pack
var htmlDoc = new HtmlAgilityPack.HtmlDocument();

htmlDoc.LoadHtml(htmlText);

var elm = htmlDoc.DocumentNode
.SelectNodes(@"//h1")
.Select(a => a.InnerText);
0107103 (ワッチョイ bf8a-4Hut)
2018/10/12(金) 20:37:39.56ID:qSk0EFmG0
>>104  .
SelectNodes(...)?.で解決しました
var elm?とか .Select()?とはやったのですがうまくいかず、わからなかったのですが
そこで使うんですね
ありがとうございました。
0109デフォルトの名無しさん (ワッチョイ ff9f-2Eea)
2018/10/13(土) 21:21:39.91ID:YNebL+WU0
XMLを読み込んで編集して保存する方法はいくつか有るようだけど制約なければXDocument使っとけばOK?
ちなみに構造が複雑なので静的モデルを作ってデシリアライズ->シリアライズが難しい場合の話
0117115 (ワッチョイ bf0a-a0t8)
2018/10/15(月) 10:43:50.18ID:TGR3LnQ40
最終リリースする時は、console.writeの類のものは削除しないとexeの中に入ってしまうんかな?
0123デフォルトの名無しさん (アウアウウー Saeb-pt3f)
2018/10/15(月) 19:00:08.62ID:SAlDu2eYa
どのログ出力ライブラリの話をしているかは知らないが
キューで実装されているならログ順序は保証されるだろうに
もしくはスレッドセーフでないライブラリを複数スレッドから触っているか
0125デフォルトの名無しさん (アウアウウー Saeb-pt3f)
2018/10/15(月) 21:07:45.41ID:SAlDu2eYa
>>123
情報が小出しかつ不明瞭だからエスパーしているが
複数スレッドからログ出力する場合の順序が未保証だからじゃないか
それがログ出力ライブラリとして妥当かどうかは更に別の話になるが

キューに積む積まない問わず、いいログ出力ライブラリって何がある?
0127デフォルトの名無しさん (ワッチョイ 07e0-SmB1)
2018/10/15(月) 21:30:24.71ID:E6pr56BO0
 私たち日本人の、日本国憲法を改正しましょう。
総ム省の、『憲法改正國民投票法』、でググって
みてください。拡散も含め、お願い致します。
0128デフォルトの名無しさん (ワッチョイ dfd2-7vHE)
2018/10/15(月) 23:26:10.89ID:L3fZFxj50
log4系はネット上に情報が沢山あるのと
自分が溜め込んだ資産が沢山あるからつい使いまわしちゃうな
仕様は確かにファッキンだが
0131デフォルトの名無しさん (ワッチョイ dfeb-JlWZ)
2018/10/16(火) 11:56:04.25ID:L6l9R59e0
GUIアプリケーションでのawaitについて教えてほしいんだけどさあ
↓この処理をボタン等のイベントから実行した場合、JklあるいはAsdfasyncが終了したかどうかってどうやってメインスレッドから取得するものなの?
async Task Asdfasync(){
await Jkl();//終わるまで画面をロックさせたくないが、これが終わっていない段階で他のボタンを押されると困る
}
0133デフォルトの名無しさん (ワッチョイ dfeb-JlWZ)
2018/10/16(火) 13:32:46.61ID:L6l9R59e0
それが使えるのならありがたいけど、ボタンのイベントから呼び出されたメソッドの戻り値って取得できるものなの?
0134デフォルトの名無しさん (アウアウエー Sa9f-NVVT)
2018/10/16(火) 13:42:08.84ID:lQy+05sVa
素直ににawaitの前後でボタンをDisable/Enableではあかんの?
そもそもそのためのawaitでしょう。

もちろん、常にそうできるわけじゃない(JKが終わったからって無条件でボタンをEnableに
できないような要件もありうるから)だろうけどほとんどの場合はそれでいいでしょ
0137デフォルトの名無しさん (ワッチョイ dfc3-EHN7)
2018/10/16(火) 18:13:14.36ID:CU/ms8va0
先に云っとく、良いソースじゃない。
こういう雰囲気?
Formにボタンを2つつけて動かしてみて
private Task __results;
private void button1_Click(object sender, EventArgs e)
{
if ((null == __results) || (__results.IsCompleted))
{
System.Diagnostics.Debug.WriteLine("Pass");
__results = Task.Run(() =>
{
this.Invoke(new Action
(() =>
{
button2.Enabled = false;
}
));
Task.Delay(5000).Wait();
this.Invoke(new Action
(() =>
{
button2.Enabled = true;
}
));
});
}
else
{
System.Diagnostics.Debug.WriteLine("Fail");
}
}
0139デフォルトの名無しさん (ワッチョイ df9b-DjIR)
2018/10/16(火) 23:11:55.51ID:O/V1xvTL0
コンボボックスが20個。
エクセルシート2の指定列の内容を各コンボボックスに入れる。
※cbo1には4列目、cbo2には10列目などバラバラ。

closedExcel?で読み込んで入れたんですけど、うまい作り方を教えてください。

Clsdata.CboAdd(this,tarPath,tarShtname,”4”,cbo1)
みたいに引数違いを20個書き、別クラスに追加するコード書いたんですけど、データだけ取ってきてクラスじゃなくフォームの方に書いた方が分かりやすいですかね?
別フォームでもコンボボックスに同じように追加するのがあるので使い回してるんですけど...

説明下手で申し訳ないですが、ご教授下さい。
0140デフォルトの名無しさん (アウアウエー Sa9f-NVVT)
2018/10/16(火) 23:33:54.56ID:9BmmQZOma
>>139
ワークシートを操作するクラスを作って、そこに列のデータをobject[]かstring[]で返すメソッドを書く

public object[] GetColData(int col) { ... }

それをコンボボックスにセットするコードはForm側に書く。
コンボボックスを引数で渡すような馬鹿なことはしちゃだめ
0141デフォルトの名無しさん (ワッチョイ c7b3-Zu1O)
2018/10/17(水) 01:21:18.71ID:HL5CR6DW0
>>139
1クラスでlist<string>を作る
シート番号、セル開始行、列、セルの終わりを入れる
combobox1.items.AddRange( )で
2 コンボボックスをList化しておく
コンボボックス番号を入れるとitemsにかえしてくれるクラスにする
3 エクセルにコンボボックス番号、シート番号、セル範囲をかいておく
それをコンボボックスのアイテムに入れてくれるクラスを作る
エクセルをいじるだけでコンボボックスのデータができる

こんな感じかな?
0143デフォルトの名無しさん (JP 0Hbb-DjIR)
2018/10/17(水) 08:13:45.91ID:Jp0PkqObH
>>142
Javaは絶対やっといたほうがいいよ。
c#perであれば2日で基本はマスターできるよ。c#と違ってawt,swing,fxは全部使い物にならないからパスでいい。
後はspringframeworkぐらい理解しといたら間違いなし。
Javaは21世紀のCOBOLなんだからあと30年はやっていける。
0147デフォルトの名無しさん (ワッチョイ 7fa5-7Kxw)
2018/10/17(水) 20:08:15.98ID:A92Ghs040
へーJava勉強してみようかなー
ってJavaとJava Scriptの違いをさっき調べて知ったくらいだけどwww
0151デフォルトの名無しさん (ワッチョイ df9b-DjIR)
2018/10/17(水) 21:47:31.88ID:6MaVa97X0
>>140
>>141
ありがとうございます。やっぱコンボボックスの引数はよろしくないですよね。

内容を取ってくるコードって一回で読み取る事は出来ますか?上から繰り返しで配列に入れるんですかね?
0156デフォルトの名無しさん (アウアウカー Safb-dUTK)
2018/10/18(木) 08:17:50.84ID:qf9NxgCDa
個人で作るならだけど、納期に間に合わせる。
バグ作って責任取らされる。
そう言うリスクから離れたいから、仕事じゃ使いたく無いな。

いあ、もう辞めたけど。
0157デフォルトの名無しさん (ワッチョイ 1f9f-ypm2)
2018/10/18(木) 11:20:06.75ID:j6REk5Yq0
リアルタイム通信系なら少しでも高速化するのは理屈通ってるけど
そうでないのなら安定感捨ててまでコンマの差を取るかというと……
って印象であってる?
0158デフォルトの名無しさん (ブーイモ MM17-PhZZ)
2018/10/18(木) 11:44:02.53ID:Mxr2Ur4LM
一般的にはその認識は間違ってる
納期の制約があるなら最初の開発段階での最適化は結果的にアプリケーションのパフォーマンスや品質を下げる原因になることが多い
一度組み上げてから余った時間で最適化やバグ取りをした方が品質はほぼ間違いなく高くなる
0159デフォルトの名無しさん (アウアウエー Sae2-hgbC)
2018/10/18(木) 12:29:09.15ID:kbeEYbP/a
.NETの黎明期から耳タコのはずだけど、そもそも大半のケースは
起動の遅さをパフォーマンスの悪さと錯覚されてるだけw

>>151
プログラムはシンプルに。
何を言ってるのかよく分からないけど、複数の列のデータを一度に返すメソッドを書きたい、
と言ってるなら、そんなことは出来てもやらない方が吉。

そんなのは多分可読性を下げるだけ。
ベタに、
ComboBox1.Items.AddRange(xlSheet.GetColData(5));
ComboBox2.Items.AddRange(xlSheet.GetColData(1));
ComboBox3.Items.AddRange(xlSheet.GetColData(9));
...

こう書いた方がぱっと見て何やってるかわかるでしょ。
こういう羅列がどうしても許せないならTagに対応する列の番号を入れておく方法もあるが、
個人的にはお勧めしないなあ
0160デフォルトの名無しさん (ワッチョイ be81-fIkj)
2018/10/18(木) 15:55:57.15ID:68MDIDIk0
>>152
確かにめっちゃ高速なんだが保守要員の確保はどうなんだ?
0162デフォルトの名無しさん (ワッチョイ e39f-j6wj)
2018/10/19(金) 07:04:52.16ID:vAxKIzRz0
App.configを使わずにサブフォルダからDLLを読み込むようにしたいのですがどうしたらいいですか?
0176デフォルトの名無しさん (アウアウカー Safb-dUTK)
2018/10/20(土) 08:20:31.03ID:Nttc2RvPa
⒊0は日本じゃ売られなかったって誰か教えてやれよ。。。
0178デフォルトの名無しさん (アウアウカー Safb-dUTK)
2018/10/20(土) 09:17:14.34ID:Nttc2RvPa
悪かったよ。
B何てあったんか。
PC98懐かし過ぎて二度見したわw
0179デフォルトの名無しさん (ワッチョイ 6ab3-b3y3)
2018/10/20(土) 09:22:24.86ID:8XvHu+iJ0
>>174
そう言うのもあるだろうけど、俺等の世代はテキスト主体だったけど今の若い奴等は画像メインって言うのが大きい気がする
俺だけかも知れないけど640KBでやりくりして56Kbpsがスゲーって言ってた世代の記憶は一生消えないと思う
0180デフォルトの名無しさん (ワッチョイ bea5-Fc6z)
2018/10/20(土) 10:03:32.03ID:qexLty9p0
Task.Delay()の時間設定ってかなりテキトーですか?
0と1msがあまりにも差がありすぎる気がス
0181デフォルトの名無しさん (ワッチョイ 0fd3-usPd)
2018/10/20(土) 10:54:16.89ID:ODHHe6QF0
>>180
そりゃ「"最小***ms以降"で目を覚まして」ぐらいの意味だからねそれ
1ms単位できっちりスレッド切り替えを保証できるOSでは無いのだ

状況次第だけどMMCSSやtimeBeginPeriod(非推奨)を設定すればある程度改善できる場合もある
0182デフォルトの名無しさん (ワッチョイ bea5-Fc6z)
2018/10/20(土) 12:57:53.42ID:qexLty9p0
>>181
そうなのか
正確に測ったわけじゃないけど1msに設定しても
体感的に10msくらい止まってる気がする
短い停止はThread.Sleepのほうがレスポンス速いな
でもこっちは長くするとデッドロック?しちゃう
でTass.Delayにしてみたんだけど・・・
あちらを立てればこちらが立たずだな
0184デフォルトの名無しさん (ワッチョイ be81-fIkj)
2018/10/20(土) 13:28:52.22ID:fOofNO0j0
>>179
DOS=HIGH

これも未だに覚えてるわ
オフセットとセグメントというめんどくさいもののおかげで
+64K-36バイト余分があるという
0187デフォルトの名無しさん (アウアウカー Safb-dUTK)
2018/10/20(土) 15:55:52.46ID:Nttc2RvPa
大分離れたけど、何年か前のC#6か、それより前で文字列に@付けたりなんだりで解決してなかったか?
0189デフォルトの名無しさん (アウアウカー Safb-dUTK)
2018/10/20(土) 16:00:52.98ID:Nttc2RvPa
>>187
すまん。
的外れだった。
0190デフォルトの名無しさん (ワッチョイ 371b-yaxr)
2018/10/21(日) 23:07:31.83ID:gVzxUBHM0
配列の次元を動的に決める方法ってあります?
例えばHairetsuっていう名前のオブジェクトがあったとして、
コンストラクタでhoge(int x)が呼び出された時は1次元配列、
hoge(int x, int y)が呼び出された時は2次元配列にしたい。
0195デフォルトの名無しさん (ワッチョイ 1f9f-ypm2)
2018/10/22(月) 14:42:05.76ID:z/eoCJYy0
ダブルクリックするとデフォルト値に戻るTrackBarを作りたいのですが
Trackbar.DoubleClickイベントを追加してもクリックイベントが動くだけで反応してくれません……
ググった情報を参考に継承クラスにしてからSetStyleでStandardDoubleClickを追加しても無反応でした
よければご教授よろしくお願いします……
0197デフォルトの名無しさん (アウアウエー Sae2-hgbC)
2018/10/22(月) 16:49:58.28ID:PhEYlXMOa
>>195
簡単だろ...と思ったけどそうでもないみたいね
CreateParamsオーバーライドしても出来なかった
https://bytes.com/topic/c-sharp/answers/492805-enable-trackbar-doubleclick-event

ダブルクリックの成立条件がOSの設定と別になるのは諦めて
自分でダブルクリックを実装するしかない気がする。知らんけど

private Stopwatch mStopWatch = new Stopwatch();
protected override void OnClick(EventArgs e)
{
  base.OnClick(e);

  const int maxDoubleClickInterval = 500;
  if (mStopWatch.IsRunning && mStopWatch.ElapsedMilliseconds <= maxDoubleClickInterval)
  {
    OnDoubleClick(e);
    mStopWatch.Stop();
  }
  else mStopWatch.Restart();
}
0200デフォルトの名無しさん (ワッチョイ f3a5-Fc6z)
2018/10/23(火) 08:10:29.01ID:WlOKeoDJ0
素人のボヤキで恐縮ですが
何度も書いては直しを繰り返し書き足したコードが
最後の最後、どうしてもデバッグが通らなくなりまして
いくら調べても動かない原因か分からず
もう考えるの面倒くさくなって
新規のFormに一から同じコード書き直してみたら・・・動くじゃん!
たぶん何度もトライ&エラーしたから何処かで操作間違えて
IDEが自動で生成したコードにゴミが混じったんじゃないかと思ったのですが
この動くコードと動かないコードの違いを簡単に発見できませんかね?
今、全ての.csファイルを一行ずつ比較してますが・・・もう飽きましたwww
メインのコードは全く同じでした
ちなみにデバッグで出るエラーは、あるクラスのメソッドの定義が無いというやつです
0202デフォルトの名無しさん (ワッチョイ f3a5-Fc6z)
2018/10/23(火) 09:16:11.92ID:WlOKeoDJ0
自作のメソッドじゃないのです
usingでちゃんとクラス指定してますし
少なくとも手で入力したコードは同じなので
0208デフォルトの名無しさん (スップ Sd8a-YMLY)
2018/10/23(火) 11:08:35.71ID:mgVace2od
staring[] strLine = system.IO.File.ReadAllLines(tarTxtPath,System.Text.・・・)

strLine = strLine[0].Split(chrCut)

return strLine;

フォーム1で一回通ったあとフォーム2で2回目通るときにエラーで別のプロセスで使用されているって出るんですがどういったエラーですか?
ファイル開いてるってことですか?
0209デフォルトの名無しさん (ワッチョイ bee8-nBLa)
2018/10/23(火) 11:14:39.42ID:Vkutn+dk0
>>207
あるある
0211デフォルトの名無しさん (ワッチョイ 2e23-agwd)
2018/10/23(火) 14:06:54.25ID:GxUzOGox0
>>208
そう
ただFile.ReadAllLinesはオープンからクローズまでやってくれるので普通は発生しない
他でそのファイルを触ってない?
あと自プログラム上はクローズしたけどアンチウィルスソフトがまだ触ってるってケースがある
0213デフォルトの名無しさん (ワッチョイ be9a-ypm2)
2018/10/23(火) 22:47:02.21ID:beMFeyu90
>>208
Readだとそもそも他でロックしていても別のプロセスで使用されているってエラーにならないはずなんだけど
書き込みモードで開いたままとかよっぽど変なことしていないか?
>>212
とりあえずダミーで
string[] strLine = system.IO.File.ReadAllLines(tarTxtPath,System.Text.・・・)
のすぐ下に別の配列への読込み
string[] strLine2 = system.IO.File.ReadAllLines(tarTxtPath,System.Text.・・・)
を入れて見てエラーになるかならないか確認してエラーが出たらお手上げ
エラーが出ないのならstring[] strLine = system.IO.File.ReadAllLines(tarTxtPath,System.Text.・・・)から2回目の実行時にエラーの原因がある
0214デフォルトの名無しさん (ワッチョイ ea68-7PZ0)
2018/10/23(火) 22:54:16.72ID:t0pM1C750
Windowsで簡単なデスクトップアプリ、コマンドプロンプトアプリを作るのが目的で
無料のVisual Studio 2013 for Desktopをインストールしている

最近調べたらVisual Studio 2017 Community版なるものが無料でリリースされてるようだけど
2013 for Desktopから乗り換える価値あると思う?
それとも2013 for Desktopをそのまま使い続けていた方がいい?
0215デフォルトの名無しさん (ワッチョイ be9a-ypm2)
2018/10/23(火) 23:19:13.87ID:beMFeyu90
>>214
2013だと最新のC#や.NetFrameWorkwpターゲットにしたものが作れないと思うけどVisualStudioのスレで聞いて
メリットとデメリット詳細に説明するのは難しいと思うから
0222デフォルトの名無しさん (アウアウカー Safb-dUTK)
2018/10/24(水) 13:24:18.69ID:pa4PW987a
基礎としては入門で十分。

読んでから作るのではなく、作りながら読む。
必要だと感じないと頭に入らない。
0226デフォルトの名無しさん (ワンミングク MMda-szOx)
2018/10/24(水) 18:41:34.40ID:HJod1vGPM
VS2013でweb formを作っています。
以前VS2008の時代、AjaxControlToolkitのModalPopupExtenderを使って設定用のポップアップを作っていました。
今回同じような事をしたいのですが、VS2013の環境で、同等の事を簡単にできるよい方法はありませんか。
0228デフォルトの名無しさん (ドコグロ MM3b-b3y3)
2018/10/24(水) 20:20:05.07ID:a4OXlgOjM
>>220
開発者の数じゃない
でかい企業は開発者の人数関係なく使っちゃダメ
小さい企業は5人までならいいってこと
なので会社が小さくても3人の開発者が2チームいたらアウト

■個人開発者
あらゆる個人開発者は Visual Studio Community を利用でき、無償または有償のアプリケーションを作成できます。
■ 組織
以下のシナリオでは Visual Studio Community を利用者数に制限なく利用することができます: 教室の研修環境、学術的調査、オープン ソース プロジェクトへの貢献
■その他のすべての利用シナリオ:
●エンタープライズではない組織において 5 ユーザーまでは Visual Studio Community を利用できます。
●エンタープライズ組織 (PC 台数 250 台以上または年商 100 万ドル以上) は上記の教室の研修環境、学術的調査、オープン ソース プロジェクトへの貢献以外では従業員や請負契約者ともに利用を認められません。
https://visualstudio.microsoft.com/wp-content/uploads/2017/05/Visual-Studio-2017-Licensing-Whitepaper-March-2017_Japanese.pdf
0235デフォルトの名無しさん (スプッッ Sd2a-w2rH)
2018/10/24(水) 21:04:15.38ID:3/mFq1HRd
tiff画像をBitmapクラスを使って読み込みたい
読み込みはできたのだけど、1ピクセル辺りに要するバイト数が想定と違って困ってます

Bitmap b = new Bitmap(file)
BitmapData d = b.LockBits(new Rectangle(0,0,b.width,b.height),ImageLockMode.ReadWrite,b.PixelFormat)

b.pixelFormatがどうやらサイズが間違っているようなんだけども
ここってどう指定すべきなのでしょうか
2バイトのところ4バイトのARGBが入ってるのでサイズがめちゃことなってしまって
0243デフォルトの名無しさん (ワッチョイ d323-4x81)
2018/10/25(木) 09:35:23.68ID:BG3PZmBX0
>>235
まずその想定してるっていうPixelFormatは正しいのかExplorerからプロパティ>詳細のビットの深さ見て確認する
> 2バイトのところ4バイトのARGBが入ってる
想定とBitmapDataでどっちがどっちなのか読み取れないけど1ピクセル2バイトってRGB565とかその辺なの?
0248デフォルトの名無しさん (アウアウエー Sa93-hBDZ)
2018/10/25(木) 20:44:40.21ID:n3Rz+F82a
>>247
フルカラーをトゥルーカラーにしたり、アルファーチャンネルを付け加えたり、
そういうフォーマットの変換機能も兼ねてるってことなのかな

MSDNのLockBitsの解説にはそんなこと書いてないけど。

不細工な設計だねw
0250デフォルトの名無しさん (アウアウエー Sa93-hBDZ)
2018/10/25(木) 22:26:50.74ID:n3Rz+F82a
>>248
フォーマットの変換機能は別に持たせた方がスマートでしょ
(現にCloneでできるみたいだし)

少なくともLockBitsにPixelFormatを引数にとらないバージョンがあってしかるべき。

GDI+はやっつけで作ったのかこういう不条理な実装他でも見た記憶があるなあ
0252デフォルトの名無しさん (ササクッテロル Sp1f-g4wS)
2018/10/25(木) 23:29:37.31ID:JIQ6DfsAp
>>250
ソース元のフォーマットに制限されず指定のフォーマットで読み書きできた方が普通に便利でしょ
別のビットマップが欲しいわけじゃないのにCloneを仲介する方が意味わからん
(LockBits自体は自動的に複製を作るようなもんだけどね)
0253デフォルトの名無しさん (ワッチョイ 579b-42fi)
2018/10/25(木) 23:30:45.76ID:oh52xQKG0
cbo1のテキストと同じものを3行目の3列目から右に同じものを見つかるまで探し、見つかったセルから下へループし、「※」印がある場合のみ「※」印の行の1列目の氏名を配列に入れ、cbo2にADD。
注)入れる際に同一氏名がすでに配列にある場合除外。
これをやるために、closedxmlで書いて見ましたがちょっと処理が遅い。

コードの書き方的には右にforで最終列までループ処理→ifで一致
forで一致した列の最終行まで下へループ処理→ifで一致したら配列に詰め込む。

現在ここで重複排除のやり方が分からないのでとりあえず全て配列にいれてます。
どうやって、書くのが最善ですか?

https://i.imgur.com/hEMt9ir.jpg
0255デフォルトの名無しさん (アウアウウー Sa1f-az0l)
2018/10/26(金) 00:36:10.18ID:pE8f1AMra
>>253
低い抽象度でものを考えすぎている
お前がやりたいのはExcelの操作を自動することではなくて目的とする結果を得ることだろ?
まず要件を明確にし、それをそのままコードに落とすだけだ
カーソルだのセルだのは最後の最後に出てくるどうでもいい瑣末な部分だ
0257デフォルトの名無しさん (ブーイモ MMf3-DBFP)
2018/10/27(土) 08:55:21.44ID:BNqfM2zkM
VBAでできることはC#でも全く同じ方法でできる
C#ではなく "VBA CSV 複数 結合" でググったら一発でサンプルは出てくる
そして "C# Excel 操作" でググって出てきたサンプルを真似してC#に機械的に書き直せ
それ以上細かいことはスレ違い
0261デフォルトの名無しさん (ワッチョイ 5b9f-3knh)
2018/10/27(土) 15:42:55.29ID:QwPOuwmq0
>>256
テキストの状態で全ファイル連結して一つのcsvファイルを作り、それをExcelで開いてxlsxで保存。

というローテクな方法でもできる。
0266デフォルトの名無しさん (ワッチョイ 8b8a-cxcD)
2018/10/27(土) 23:56:23.88ID:cqzal98J0
C#のクラスを考えるときにテストのことを考えるとさ
privateの関数や変数は持たない方が望ましいと聞いたんだがそこまで意識してプログラミングしてる?
役割を逸脱してる可能性が高いと言われてるのだがコード的にそうはさせない方法とかあるのだろうか
0268デフォルトの名無しさん (ワッチョイ 8b8a-cxcD)
2018/10/28(日) 01:01:32.10ID:sLs9tkqy0
>>267
全部パブリックにしろって話ではないと思うのだが、
クラスとしてちゃんと機能してるかをテストしやすくするものとして確認しやすいように設計をするようにと言われた
アクセッサを準備しろってことなのか
、protectedで作って継承してテストをしやすくしろってことなのかはわかってない
0270デフォルトの名無しさん (ワッチョイ 8b8a-cxcD)
2018/10/28(日) 01:05:59.90ID:sLs9tkqy0
>>269
たぶん本質は内部所持して扱う変数を極力減らしましょうってことなんかなって思ってる
クラスを使うのにA・B・Cを事前に呼び出して内部変数の設定をしないと使えないですとかだと
バグのもととかになるから条件縛りを減らしましょうとかってことなんじゃないかと
0272デフォルトの名無しさん (ワッチョイ f7a5-Az/2)
2018/10/28(日) 08:05:20.34ID:3RT+wTpd0
日曜プログラマです
理屈に疎いので教えてください
Win32APIをマーシャリングしてプログラムを作成中なのですが
コールバックをデリゲートでやってるので
これは必然的にFormとは別のスレッド(マルチスレッド)という理解で正しいでしょうか?
このコールバックからの信号をトリガーにForm上のコントロールを触ると
「別スレッドからアクセスした」と怒られます
これを回避するために別のデリゲートを挟んでコントロールを触っていますが
これ以外に方法ないでしょうか?
デリゲート挟むと時々信号取りこぼすみたいで
上手くコントロールが反応しないことがあるんで改良したいのです
0274デフォルトの名無しさん (ワッチョイ ebd3-o90R)
2018/10/28(日) 08:56:08.45ID:kvhoQsiz0
>>272
> コールバックをデリゲートでやってるので
> これは必然的にFormとは別のスレッド(マルチスレッド)という理解で正しいでしょうか?

どこのなんのコールバックなのかこっちは知らんのだが
「別スレッドからアクセスした」と怒られるんならそうなんでそ

> これを回避するために別のデリゲートを挟んでコントロールを触っていますが

デリゲートを挟んでとあるけど、前提としてコントロールを触る処理はInvokeメソッドにちゃんと投げてる?
0275デフォルトの名無しさん (ワッチョイ bbb3-QdD5)
2018/10/28(日) 10:44:38.69ID:zjm6bfwn0
すみません、c#の初心者です。UnityでRPGを製作しているのですが、質問があります。

if (条件式1) {
条件式1が真の時のダメージ処理;
...;
}else if(条件式2) {
条件式1が偽で条件式2が真の時のダメージ処理;
...;

これに、ダメージを999以下に抑えたいので<=999を入れたいのですが、どこに入れればいいのでしょうか?

簡単な質問で申し訳ありませんがよろしくお願いします。
0276デフォルトの名無しさん (ワッチョイ ff9a-wZW4)
2018/10/28(日) 10:51:17.84ID:JM6DGBKw0
>>275
ダメージ処理終わった最後
int dmg=0;
if (条件式1) {
条件式1が真の時のダメージ処理;dmg+=a;
...;
}
}else if(条件式2) {
条件式1が偽で条件式2が真の時のダメージ処理;dmg+=b;
...;
}
dmg=dmg>999?999:dmg;//またはif (dmg>999) dmg=999;
0279デフォルトの名無しさん (ワッチョイ f7a5-Az/2)
2018/10/28(日) 11:48:33.54ID:3RT+wTpd0
>>274
Invokeメソッドに投げるとはこういうことでしょうか?
private void _TS()
{
TextShowDelegate dlgTS = new TextShowDelegate(TextShow);
IAsyncResult ar1 = BeginInvoke(dlgTS, null);
}
Tipsの寄せ集めでやってるので理屈はあまりよくわかってませんwww
0280デフォルトの名無しさん (ワッチョイ 6bb8-3KA+)
2018/10/28(日) 11:54:36.96ID:Lzmpvi1g0
FXのEA(自動売買ツール)を提供しています。
興味がありましたら見てみてください。
http://hbgfvtgvfvr.weblog.to/
0281デフォルトの名無しさん (ワッチョイ 8b8a-cxcD)
2018/10/28(日) 13:12:56.47ID:sLs9tkqy0
>>271
クラス化してる意味がほぼ無さそう....

コンストラクタで引数渡してメンバ変数にデータを覚えさせて使うのと
ことあるごとに内部関数の引数にデータを渡すのってどちらのが良いのだろう?
影響範囲とか小さくすることを考えると後者なのかなって思うけども
0282デフォルトの名無しさん (ワッチョイ 8f9f-cwcA)
2018/10/28(日) 16:02:02.80ID:gvAysy2V0
>>281
あるメソッドで使うからコンストラクタで渡すって考え方自体おかしいかな
メンバはそのクラスが持つ必要があるから持っているわけでメソッドで使うから持っている訳では無い
例えば体クラスでBMIを計算するときは体重、身長は体情報だからクラスのメンバで持たせる
身長クラスでBMI計算するときは身長はメンバで持って体重はメソッドの引数で渡す
0283デフォルトの名無しさん (ワッチョイ 8b8a-cxcD)
2018/10/28(日) 17:25:54.20ID:sLs9tkqy0
>>282
クラスの役割的にはそれであってるのだと思う
聞きたかったのは例えばその身長クラスに特化した話で
身長をそもそもメンバに持つ必要性はあるのだろうか?って話
0287デフォルトの名無しさん (ワッチョイ 05a5-Az/2)
2018/10/29(月) 11:51:55.81ID:IQ5w1AIM0
>>286
情報ありがとうございます
勉強させていただきます
0288デフォルトの名無しさん (ワッチョイ 5781-dYvX)
2018/10/29(月) 13:34:23.83ID:09l7CDuO0
C#ではnumpy.randomみたいにSeed値を指定するようなことってできるんでしょうか?
0293デフォルトの名無しさん (ワッチョイ d323-4x81)
2018/10/29(月) 14:52:04.17ID:oAZGLoeZ0
_から始まろうがそうでなかろうがC#では普通の識別子であって言語的に意味の違いはない
メタ的に意味はあるかもしれんがそれは文脈次第

なのでもうちょっと文脈を示してもらわないと意味分らん
0294デフォルトの名無しさん (ワッチョイ d3eb-o1DS)
2018/10/29(月) 14:52:15.80ID:ZsrJ9icq0
>>292
DIっていうんだよ
0296デフォルトの名無しさん (ワッチョイ 57e8-7TBo)
2018/10/30(火) 17:44:38.38ID:Vdu6vWjQ0
C#で組込み系ってできるの?
0298デフォルトの名無しさん (ワッチョイ 57e8-7TBo)
2018/10/30(火) 17:59:29.99ID:Vdu6vWjQ0
>>297
案件あって戸惑ってる
また1から学ばないといけないのか...
0301デフォルトの名無しさん (オイコラミネオ MM09-phox)
2018/10/30(火) 20:17:27.88ID:HzRny5oEM
ラズパイにwindows IOT入れてUWPで作ったり unityからUWP吐くとかもできるぽよ
従来の組み込みの世界とは別物だろけど

沼っぽいけど実績になれば
キャリア的には面白いと思う
0302デフォルトの名無しさん (ワッチョイ 9f06-eYkk)
2018/10/31(水) 02:11:45.22ID:90i4Cfzn0
c#って何から覚えてけばいいのだろう?
今の知識としては、インスタンス化は何かnewする奴だっけ? 的なレベル、何というか世界が広大すぎるしネットで調べてもサイトは何書いてんのか分からないし……わりぃ、やっぱつれぇわ
0304デフォルトの名無しさん (ワッチョイ e3d2-8L5D)
2018/10/31(水) 03:38:24.10ID:OyhA4eFa0
>>302
C#は後発なだけあって負の遺産みたいのが少ないから
まずは自分に必要なところから覚えていけば大丈夫
やりたいことをやってるうちに疑問に思ったところを調べていけばおk
0306デフォルトの名無しさん (ワッチョイ e3d2-pP8n)
2018/10/31(水) 06:49:24.56ID:nRECWsn80
ラムダ式というのがよくわからないので教えてください
読んでる入門書に例えば普通のメソッドで
int add(int n){return n+2};
とあればラムダ式なら
n=>n+2;と書けるとあるのですがどうやって使えばいいのか?が書かれていません
どのように使えば良いのでしょうか?何が便利になってるのかも?です。
0308デフォルトの名無しさん (ワッチョイ e393-phox)
2018/10/31(水) 07:29:35.90ID:xX3V2hUr0
間に合わせの説明として利便性をいうと
わざわざ関数addを明示的に作らなくてもその場で関数を作れる=関数名もつけるまでもない匿名関数として便利
ついでに引数と戻り値の型も省略できるからLINQの述語やプロパティ値をシンプルに記述できる
あとMVCのrazorでもヘルパーへの引数に、プロパティ値ではなくプロパティを渡すのに使われたり
0309デフォルトの名無しさん (ワッチョイ ebd3-o90R)
2018/10/31(水) 07:57:27.30ID:AQSs4bkC0
>>306
書く方も別の場所にいちいち関数定義しなくて良い
読む方もそこに処理の内容が書いてあった方が良い

…とも一概に言えない場面は多いので、自分がコーディングしてて
脳が「ここラムダ式で書きたい」と自然に出てくるまでは封印しててもええんやで


void Do() {
 int buffer = {1,2,3,4,5};
 var q1 = buffer.Where(Even).Select(Plus2);
 var q2 = buffer.Where(x => x % 2 == 0).Select(x => x + 2); // q1とやってることは同じ
}

bool Even(int x) { return x % 2 == 0; }
int Plus2(int x) { return x + 2; }
0311デフォルトの名無しさん (ワッチョイ e3d2-o1DS)
2018/10/31(水) 17:27:52.66ID:nRECWsn80
>>310
すいません理解できてないです
というかまだ読んでる本で説明がなされていないようです…
この章を取り敢えず読み切った後また読み返せば理解できるってことですね
LINQとラムダ式?とやらを使わずにメソッド使えばいいやって認識だとこの先苦労しますか?
回答くださった方ありがとうございます
0313デフォルトの名無しさん (アウアウエー Sa93-hBDZ)
2018/10/31(水) 18:24:52.71ID:NuHnUQr6a
>>311
LINQはともかく、ラムダ式は必須の知識でしょうね。
少なくとも使えるとコードの書き方に大きな差が出るのは間違いない

ただ、デリゲート自体が初心者には理解しづらい概念とも思うので
よく分からない場合は固執せず後回しにした方がいいかもしれないね

本質的にはそんなに難しい話じゃないから、最初分からなくても時間が解決するはず
0316デフォルトの名無しさん (ワッチョイ 57a5-Az/2)
2018/10/31(水) 19:35:13.26ID:VqQq8o9J0
>>310
へえ、ラムダ式はデリゲートが基本にあるのか
0323デフォルトの名無しさん (ワッチョイ afeb-o1DS)
2018/10/31(水) 23:51:55.59ID:lqvIUA6e0
ラムダ式を理解するのにデリゲートなんて要らねえのにな
一体どんな頭してんだ
0324デフォルトの名無しさん (ワッチョイ b693-a/N+)
2018/11/01(木) 04:47:03.77ID:7mP44JOI0
タイプセーフな関数ポインタやコールバック、匿名関数で説明してるけど

それで通じないと どこから説明すれば良いかたいへん

デリゲートからの説明はしんどい…
0326デフォルトの名無しさん (ワッチョイ 4e80-mY15)
2018/11/01(木) 07:48:57.67ID:PBz6MbCm0
Linq は、Java のStream、Ruby on Rails と同じ。
関数型

メソッドチェーンしていって、一番最後にレコードを取得する。
遅延実行

ずっと、フィルター・SQL 文だけを組み立てて、一番最後だけアクセスする
0327デフォルトの名無しさん (スップ Sd5a-rxrj)
2018/11/01(木) 11:43:18.05ID:Ezzdmjted
>>323
元の質問が理解は出来るけど使い方がわからないって話だからな
FuncやActionか、メソッドのデリゲート引数ぐらいでしか使わないしあながち間違えてない
0329デフォルトの名無しさん (スップ Sd5a-rxrj)
2018/11/01(木) 13:53:28.62ID:Ezzdmjted
ラムダ式を何処で使うかの話でデリゲートを何処で使うかについてはふれてないよ
デリゲートの使い道でいうと非同期実行するために使うとか色々ある

ラムダ式に関しては、FuncやActionかメソッドの引数ぐらいでしか使ってないと思うんだけど他になんかある?
0334デフォルトの名無しさん (ワッチョイ f68a-ZA70)
2018/11/02(金) 03:44:16.47ID:hToiCYAd0
Postgresを、SQLiteみたいにDBファイルとコネクタだけで使うにはどうすればよいでしょうか?
0335デフォルトの名無しさん (ワッチョイ caeb-ZA70)
2018/11/02(金) 13:32:10.56ID:1IoIYp5Z0
無理だろそりゃ
0337デフォルトの名無しさん (ワッチョイ caeb-ZA70)
2018/11/02(金) 13:51:48.43ID:1IoIYp5Z0
>>336
>コネクタだけ
って書いてるからどうにもなんないよ
0339デフォルトの名無しさん (ワッチョイ caeb-ZA70)
2018/11/02(金) 13:56:59.71ID:1IoIYp5Z0
>>338
じゃあ俺には無理だから、あんたが教えてあげたら良いんじゃないの
0340デフォルトの名無しさん (スップ Sdba-mm7G)
2018/11/02(金) 17:21:36.81ID:ouVO3wBCd
namespace Drawlinetest
{
public partial class Form1 : Form
{
PictureBox pbox = new PictureBox();
Point pt = new Point(-1, -1);
public Form1()
{
InitializeComponent();
pbox.Location = new Point(0, 0); pbox.Size = new Size(500, 500);
this.Controls.Add(pbox); this.ClientSize = pbox.Size;
pbox.Image = new Bitmap(pbox.Width, pbox.Height);
pbox.MouseDown += MD;
}
private void MD(object sender, MouseEventArgs e)
{
Point p = e.Location;
if (e.Clicks > 1) { pbox.Image = new Bitmap(pbox.Width, pbox.Height); return; }//ダブルクリックで画像リセット
int x = pbox.Width - 1, y = pbox.Height - 1;
if (pt.X < 0 || pt.X > x || pt.Y < 0 || pt.Y > y) { pt = p; return; }
Graphics g = Graphics.FromImage(pbox.Image);
g.DrawLine(Pens.Black, pt.X, pt.Y, p.X, p.Y);
pbox.Refresh(); g.Dispose(); pt = p;
}
}
}

前スレにあったのを参考に400角にピッチ20の方眼を作りました。
クリック時に近い点を取って連続線にしたい場合どうすればいいですか?
0341デフォルトの名無しさん (ワッチョイ 4e9a-Y/6i)
2018/11/02(金) 17:41:50.22ID:KsjOw3TM0
>>340
「近い点」の定義は?
座標差が10以内の場合を0に近いとした場合
p.X=p.X-p.X%20+((p.X%20)>10?20:0)
Y座標にも同じような計算式を適用
でそのコピペしたところに組み込むときは画像範囲外の座標を指定した場合はリセットされるので、その辺も改変しないと
0343デフォルトの名無しさん (アウアウエー Sa52-uVrJ)
2018/11/02(金) 18:39:24.09ID:Zmz30XyOa
>>340
マウス座標に一番近い格子点の座標を求める方法って意味なら、

(1) マウス座標を囲む4つの格子点を返すメソッドを書く(マウス座標が格子点上の
場合に何を返すかは適当に決めて)

(2) マウス座標と任意の座標の距離(の2乗)を求めるメソッドを書く(ラムダ式でいい)

(3) LINQのOrderByでも使って(1)と(2)から求められる
0344デフォルトの名無しさん (アウアウエー Sa52-uVrJ)
2018/11/02(金) 18:43:56.30ID:Zmz30XyOa
今気づいたけど、MSDNのリファレンス、無茶苦茶見づらくなってない?
拡張メソッドはどこで見られるのこれ?
VS2010時代の人力で翻訳されたドキュメントも読めなくなってるし....

MSっていらんことする天才だなw
Googleもそうだけど
0349デフォルトの名無しさん (ワッチョイ 97b3-zV7r)
2018/11/03(土) 01:49:56.08ID:m4AFUYcO0
>>340
数学の問題かな
マウスの座標を20で割って商nと余りを求める
余りが0<10
x=20n
余りが10<20
x=20(n+1)
yも同様にして座標が求まる
2点の座標p1,p2に線を引く
これの繰り返し 
0351デフォルトの名無しさん (ワッチョイ 4ea5-PRUr)
2018/11/03(土) 07:55:15.80ID:SApjZlYC0
>>345
コンストラクタ、プロパティ、方法、イベント
「方法」ってなんだ?
と思ったらメソッドかよ!
こんなクソ訳付けられるなら英語の方がマシだなwww
0352デフォルトの名無しさん (ワッチョイ 5b80-Q1ft)
2018/11/03(土) 08:03:39.30ID:rSl2Ac3O0
ついにMSもバカをきりすてはじめたか
いちいちバカの相手をしてたら大変だからな
0354デフォルトの名無しさん (アウアウエー Sa52-0Z6C)
2018/11/03(土) 12:53:13.50ID:q2N3VeHVa
あえて誰にでも間違いがわかるバカな翻訳を残すことで、
俺達はもう英語の読めないバカジャップを相手にする気はない、英語を読むか廃業しろ、
というメッセージを伝えようとしているのだろう
0356デフォルトの名無しさん (ブーイモ MM26-0Z6C)
2018/11/03(土) 13:37:41.08ID:N8ATSODSM
>>355
ビルドで切り替えるなら #if DEBUG で十分
Web開発で使われるような動的な設定の切り替えは、同じビルドを環境に応じた異なる設定で実行したいというニーズにおいて使用するもの
Webだと、ビルドしてステージング環境でテストしてそのまま同じものを本番にデプロイするんだよ
0358デフォルトの名無しさん (アウアウエー Sa52-uVrJ)
2018/11/03(土) 18:29:16.11ID:SHI5qsHHa
>>357
前にも書いた気がするけど、本質はデリゲートっていう概念を導入することによって
デリゲート型の変数が作れるってことだと思うよ。

C#からデリゲートがない言語を見た場合、それは
デリゲートのリテラル( = メソッド)の定義は出来るのにデリゲートの変数の宣言はできない不自由な世界に見える
0360デフォルトの名無しさん (アウアウエー Sa52-0Z6C)
2018/11/04(日) 00:27:59.79ID:Ujv6OCQma
設計においては全体像を常に持ちながらもフェーズに応じて必要以上に詰めすぎることなく適切な抽象度に留めるバランス感覚が重要
厳格なウォーターフォールだろうとアジャイルだろうとそこは同じで、最初から細部を詰めようとするのは確実に時間の無駄
0365デフォルトの名無しさん (ワッチョイ 5ba5-PRUr)
2018/11/04(日) 10:54:42.18ID:iKmrkyIQ0
ユーザーなども含めた他人の意見をフィードバックしようなどと
色気を出した瞬間、どこまで詰めるかなんて分からなくなる
結局一人で設計してどこまでやるかなんて一人で決断するしかない
アプリなんて自分が使って満足ならOK
0366デフォルトの名無しさん (スプッッ Sd5a-7KdF)
2018/11/05(月) 15:59:03.10ID:QhIuz4Ucd
disposeを継承したクラスのインスタンスのデストラクタが参照があるときに呼び出されてるのだけど
そんな現象に見回れた人居ませんか
disposeの継承は関係ないかもしれないけどそのクラスの作りは今そうなってます
0368デフォルトの名無しさん (スッップ Sdba-qaUX)
2018/11/05(月) 17:39:02.66ID:ci20RGBId
>>340
これって前打った点と新しい点を線引いてるけど、前の点はどう記憶してるんですか?前の点にもう一個情報を持たすのは可能ですか?
線が被った時、線をずらして書こうと思ってるんですけど、
例えば↓2マス↑6マスとクリックして書いたとき被るのをちょっと右にずらして書くのは出来たんですけど、
条件をpt.X==p.X && pt.Y<p.Y
だと変わって欲しくないときもズレる。

ズラす条件は直角で、始点を0を基点として
↓に引いた時は左
↑に引いた時は右
←に引いた時は上
右に引いた時は↓
0369デフォルトの名無しさん (ワッチョイ 4e9a-Y/6i)
2018/11/05(月) 19:35:41.47ID:W+eHh5+20
>>368
>前の点はどう記憶
フィールドのPoint pt
描画範囲が被る場合の判定がちょっと思いつかないけど
前の点にもう一個情報じゃなく描画した点の位置を全部記憶してからになる気がする
線描画を半透明にして被った場合にもわかるようにとか駄目なの?
0372デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/06(火) 16:46:04.32ID:KNaAB8gP0
async/awaitが難しすぎる
一見簡単そうに見えるんだけど、結構注意深く使わないとこれはまるよね
(Web見ていると使い方で注意事項多いし)

これって、MS的には何を目指したものなの
最初見た時は、初心者向けかなと思ったら偉い難しいのでびっくりした
BackgroundWorkerなんて、結構納得しやすかったのに
0373デフォルトの名無しさん (アウアウエー Sa52-uVrJ)
2018/11/06(火) 17:49:22.75ID:Irg6T2PQa
そこはそんなに難しく考えることないかと

「非同期的にAの終了を待機してその後Bを実行」みたいなコードを
普通のシーケンシャルな処理みたいに書けるようにするためじゃないの?
0374デフォルトの名無しさん (ワッチョイ 8a7e-zV7r)
2018/11/06(火) 18:02:29.90ID:tGae1nmw0
まぁ初心者向けというか、Progress<T>等でも実装を隠蔽しつつ
UIスレッドで行うべき処理を文脈的に記述しやすく…?

いや、個人的にはyieldよろしく妙なコードを生成した気がするし
.NET 4考慮でSynchronizationContext捏ねる方が好きだけどね
0376デフォルトの名無しさん (ワッチョイ caeb-ZA70)
2018/11/06(火) 18:14:27.73ID:BgqxGxaf0
すまんが、あるクラスがインスタンス化された際、そのクラスのコンストラクターでインスタンス化した元のオブジェクトorクラスを取得することってできないの?
デバッグに使いたいんで引数で渡すのはなしでたのむ
0381デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/06(火) 19:29:28.47ID:KNaAB8gP0
あれ?難しいと思っているの俺だけ?

>>375
下の場合、基本 処理1=>test()=>処理2と逐次処理する。
test()のとこでawaitしているにもかかわらず、すぐにTestAsnc()は終了しちゃうとこ
test()で止まっているのに、値も設定されず次の処理にいくとか、動作が見た目と違い過ぎる

main(){
int ret = TestAsync();
}
async Task<int> TestAsync() {
処理1;
int ret=await test();
処理2;
return ret;
}
int test() {
24時間かかる処理;
}
0382デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/06(火) 19:44:02.97ID:KNaAB8gP0
>>375
◆async void は使うな
投げっぱなしは、なんでダメやねん

◆理由は分かったけど、Waitと混ぜるとデッドロックするとこ
 シングルスレッド止めたら、戻ったら動かないのは理解出来る
でも、async/awaitってTaskクラスを元にしてるんでしょ。
だったら、似たような動作をしてくれるもんだと…

◆SynchronizationContextとは何者?
UI処理に使うのはわかった。でも、これってその為だけ?


でも、一番の理由は、背景を含めてきちんと解説しているHPあるいは書籍が欲しいかな
0386デフォルトの名無しさん (アウアウウー Sac7-eilh)
2018/11/06(火) 20:16:58.70ID:KZ0uzBLfa
>>382
未確認飛行 Cの本サイトやブログが詳しい、例えばこれ
https://ufcpp.wordpress.com/2012/11/12/asyncawait%E3%81%A8%E5%90%8C%E6%99%82%E5%AE%9F%E8%A1%8C%E5%88%B6%E5%BE%A1/

async voidを避けるべき理由は http://neue.cc/2013/10/10_429.html を見てくれ
awaitとWaitを混ぜるとデッドロックするのはSynchronizationContextが関係していて
awaitするTaskの終了後は、awaitする前のスレッドで続きの処理をしようとするのが理由(ConfigureAwait使えば別のスレッドで続きの処理をする)
WaitはTaskが終了するまでそのスレッドで何もできなくなるから、awaitの「続きの処理をしようとする」ことが出来ずにデッドロックする
それで件のSynchronizationContextは、UI処理で使うためのものと思えばいいと思う
Webサーバー側でも同期コンテキストの概念があるらしいがよく知らない

>>385
https://ufcpp.net/blog/2018/1/await/
0387デフォルトの名無しさん (ワッチョイ 97d3-QXT6)
2018/11/06(火) 20:22:22.86ID:hiXG5OoB0
>>381,382
await/asyncが簡単だとは俺も思わんが初っ端からタイポってレベルじゃないコードが出てくると
「わかった」と言ってる部分すら疑ってかかってしまう

> ◆async void は使うな
わざわざ特別に許可されている構文であり使うなってことはない
使うべきではない場面で手抜きの為に採用するな、という文脈なら理解できる

> ◆理由は分かったけど、Waitと混ぜるとデッドロックするとこ
ConfigureAwaitまわりについては確かに直感に反する場合が多々あるが
結局のところをどちらを既定にするべきかという話になる

> ◆SynchronizationContextとは何者?
UI処理に使うのはただの一例。await(に限った話でもないが)の継続する処理を
どこでに実行するのかカスタマイズするために自分で実装することもできる
0389デフォルトの名無しさん (アウアウエー Sa52-uVrJ)
2018/11/06(火) 20:39:00.29ID:Irg6T2PQa
>>381
落とし穴が存在する、という意味で難しいのは確か。
非同期メソッドに限らず非同期処理は全部そうだけど

>動作が見た目と違い過ぎる
これは勘違い。
testの終了を(非同期的に)待機して終了したら下の行を継続するんだから
むしろ見た目通りでしょ。

そこでメソッドを抜けてるわけじゃない。
ただスレッドの占有を止めるだけ
0390デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/06(火) 20:54:24.19ID:KNaAB8gP0
>>387
>await/asyncが簡単だとは俺も思わんが初っ端からタイポってレベルじゃないコードが出てくると
どういうこと?
ちなみに、俺はmain中のint ret = TestAsync();はコンパイラーエラーを期待していた。
普通に実行できるうえに、test ()を待たずして、TestAsync()が終了するのに
びっくりしたけど、そういう動作なんでしょ?だから分からないと

>>389
>そこでメソッドを抜けてるわけじゃない。ただスレッドの占有を止めるだけ
でも、test()が終了していないのにTestAsync()が終了するのはなぜ?
retにはTask<int>型が入って、Result未設定になってるけど。
0391デフォルトの名無しさん (アウアウウー Sac7-eilh)
2018/11/06(火) 21:02:02.39ID:KZ0uzBLfa
>>390
試したコードを貼ってくれないか?
皆が >>381 の書き込みを見て想像したコードは
https://ideone.com/gVD0Ob こんなのだと思うけど
ご覧の通りTask<int>からintには変換できないし、intはawait出来ない
0393デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 21:06:23.76ID:QbvaQ8DKa
初心者には難しというか誰に対しても理念をしっかり理解しないと使えないし
それでも誤用してる人も多い
スレッドの流れもわからないでいろいろバグコード作ってて後で思ったように動かなくなる

それよりもTaskを使ったシグネチャーで一貫性が損なわれてるのが気持ち悪い
あとから出てきた言語などではasync awaitはきれいになってたりする

それまでが暗黒だったのですこし明るくなっただけでもすごく進歩してると思い込んでる
0396デフォルトの名無しさん (ワッチョイ 5a9b-qaUX)
2018/11/06(火) 21:17:05.17ID:J1JRrSzC0
@座標A(50,50)
 座標B(100,50)
 にABを結ぶ下半分の半円。

A座標C(100,50)
 座標D(50,50)
 にCDを結ぶ上半分の半円

まず、正方形の左上、右下の座標をangleに入れ
@angle=(50,25,100,75)
Aangle=(50,25,100,75)

@DrawArc(Pen, angle, -180, -180);
ADrawArc(Pen, angle, -180, 180);
これで合ってます?

よく解らない点
angle座標の計算式
半円の角度の意味がいまいち分からないです。
0397デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/06(火) 21:17:13.88ID:KNaAB8gP0
>>391
>試したコードを貼ってくれないか?
長いソースなんでそれは無理だけど

単純に簡略化したつもりだったんだけど
実際にはmain()でなくGUI
Task<int>ではなく、Task<bool>本質的には変えてないつもりだったんだけど…

悪いけど
ちょっと、時間もらって 明日に仕切り直しということで
0398デフォルトの名無しさん (ワッチョイ 4e9a-Y/6i)
2018/11/06(火) 21:31:56.37ID:8KRwrCef0
>>396
>angle座標の計算式
何の計算式が欲しいのかよくわからない。angle=四角に内接する楕円がベースになる
ここを参照
https://dobon.net/vb/dotnet/graphics/drawrectangle.html
ここだとRectAngleの座標をそのまま入れているけど意味は変わらない
水平方向右が角度開始位置
実行できる環境が無いのでなければ数値変えて自分で動かしてみる方が早く理解できる
0401デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 21:44:59.53ID:QbvaQ8DKa
ボタン押したらクリックイベントハンドラ(メソッド)で重い処理をしてGUIが固まってしまう
これを何とかするにはGUIに制御を返してやらないといけない

awaitではasyncメソッドの中のどこかのレベルで新しいTaskを作って
そっちで別の処理をさせて上のメソッドに制御を戻すことができる

必ずではないけどawaitに出会ったらスレッドは結果としてそのメソッドを離脱して
上位のコードを実行する

awaitに出会ったらスレッドは処理が終わるのを待ってはいない!(重要)
この場合はGUIに制御が戻ってる
awaitの戻り値が用意できたら良きタイミングでまたGUIから処理(スレッド)をかっぱらって続きを実行させるだけ!
0403デフォルトの名無しさん (アウアウエー Sa52-uVrJ)
2018/11/06(火) 21:48:56.89ID:Irg6T2PQa
>>396
(1) まず最終的に描きたいパイをパイに切り取る前の全体の円(楕円)を考えて、
(2) その円(楕円)に外接する長方形を考える

こういう順番だと思うよ

DrawArcが引数に要求するのはその外接する長方形と、時計の3時からの開始位置の角度と
パイの角度だと思う

使ったことはないがw
0406デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/06(火) 22:37:57.23ID:KNaAB8gP0
これって、まじなソースコードって書けないの?
全角に変換してみた

        public Form1()
        {
            InitializeComponent();
            this.AllowDrop = true;
            wtest();

        }
        void wtest()
        {
            var ret=TestAsync();
            System.Diagnostics.Debug.WriteLine(ret.ToString());
        }

        async Task<bool> TestAsync()
        {
            bool ret = false;
            var task = Task.Run(() => {
                System.Threading.Thread.Sleep(10 * 1000);
                ret = true;
                });
            await task;
            
            return ret;
        }
0407406 (ワッチョイ 039f-MyS3)
2018/11/06(火) 22:39:33.41ID:KNaAB8gP0
半角に変換して試してw

試したのは、GUIなのでFormアプリで作ってみた
で、疑問点は、
1.これがそのまま動くこと。var ret=TestAsync();でコンパイラーエラーの方が納得する
  理由は、retに値が設定出来ないから。そのうえでTestAsync()呼び出しにawaitを強制するとか
2.await taskでTestAsnc()で待ちが入ると、その上位のメソッドの処理に流れが移ること

要するに流れが直観的でないと感じる。ただし、この流れはがTestAsyncがasync voidならまだ納得がいく
0409デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 22:54:04.17ID:QbvaQ8DKa
1.
var ret=TestAsync();でコンパイラーエラーがでるとtaskをそのまま受けたい場合に困る
retはただのTask<bool>であってそいつのResultじゃないからそれでいいだろう

2.
そういう流れで処理をしたいのでawaitを使ってる
それが疑問に思うならスタートがまちがってる
0411デフォルトの名無しさん (ワッチョイ 8a7e-zV7r)
2018/11/06(火) 22:54:58.69ID:tGae1nmw0
>>407
asyncメソッドと言っても戻り値は単なるTask<bool>だし
Taskにawaitが強制されたらTaskを待つ場所を選べなくなる

動作的に言えばawaitした時点で抜けて後に再開しようとする
ILSpy 3.0.1とかでasync/awaitデコンパイルを無効にして
ビルド後のバイナリからメソッド内容を見てみるといい

まずTask.ContinueWith()+TaskScheduler.FromCurrentSynchronizationContext()とか
従来の書き方を学んだ方が良いと思う、コルーチン的な物の前に
0414デフォルトの名無しさん (ワッチョイ 97d3-QXT6)
2018/11/06(火) 22:58:30.18ID:hiXG5OoB0
全 角 に 変 換 し て み た


やべえコイツ思っていた以上に馬鹿だぞ!!!

int に変換できるとか言ってたらvarで受けてるし面白すぎんだろ
0416デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/06(火) 23:01:39.73ID:KNaAB8gP0
>>409
おおっ 多分これが答えだな
納得はしていないけど、納得しやすい答えかな

例えば、2については、>>404
>awaitに出会ったらそこで待機して結果が出るのを待ちます
という受け取り方もあるけど、なぜ
>それが疑問に思うならスタートがまちがってる
のかな?

で、この考え方に到達するに参考する書籍等は?
0418デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 23:07:21.50ID:QbvaQ8DKa
重い処理Aをタスクでやって同時にメインのスレッドを実行し続けるのが目的なので
上位のメソッドが引き続き実行されるのが期待の動作

awaitされた重い処理Aの続きのCが実行されるのはまた別の話
0419デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 23:13:59.85ID:QbvaQ8DKa
1. 順番に処理をやってるけど別の処理も同時にやりたいな A B
2. その処理が終わったらそのタイミングで別の処理をやりたいな A → C
というのを書くのが従来の非同期処理だと面倒なのでawait asyncを使ってる
0420デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 23:21:04.01ID:QbvaQ8DKa
上の2は従来だとコールバックメソッドだったが
今はawaitより下の行のこと

従来だと処理が終わったらコールバックメソッドを実行する
awaitだと処理が終わるまで待つ

やってることは同じでも概念が変わって見える

でもやっぱり待つと言うのと違うんだよなあ
0421デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/06(火) 23:26:37.38ID:KNaAB8gP0
ありがとう  真面目に答えてくれた人w

差しあたって、消化しきれていないけど
なんとなく見えてきたので、よく考えてみまーす

>>420
うん。awaitって、2つの意味があるんだよね。
  非同期で実行する + ここで同期する(戻り値設定とか)
でも、そこが分かりづらい
でさらに、呼び出し元のスレッドは動く だから、呼び出し元の関数が動くということなんだろうけど
0422デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 23:26:58.31ID:QbvaQ8DKa
Aを待ったあとにCをやってほしいのに先にBが実行されてしまう
これはけしからん!

というのはスタートが間違い

AとB同時にやってるけど非同期処理Aが終わったらCをやってほしいが正解
0424デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 23:37:32.97ID:QbvaQ8DKa
awaitではどのスレッドも待ってない

元のスレッドは呼び出し元の続きを実行し続ける
新しいtaskスレッドは実行し続ける

勝手に第三のスレッドができて待機したりしない
0425デフォルトの名無しさん (ワッチョイ 27c3-YdG1)
2018/11/06(火) 23:49:27.64ID:jcRa2hVA0
await Task.Run( () => { 処理A } );
処理B
とあったら、
var scheduler = TaskScheduler.FromCurrentSynchronizationContext();
var task = Task.Run( () => {処理A} );
task.ContinueWith( (t) => {処理B}, scheduler );
みたいに置き換わる。実際はもっと複雑だけど。
0426デフォルトの名無しさん (ワッチョイ 4e81-mm7G)
2018/11/06(火) 23:51:27.64ID:LW+aJyL/0
これでMSは何目指したの?なんて煽りするほどの相手に初心者煽りと言われてもなーって感じする
そもそもソフトウェア技術でハマりやすいスレッド周りをかなり触りやすく提供してくれてる技術だと思うし、その点でMSに苦情なんて出る?
0427デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 23:56:24.75ID:QbvaQ8DKa
さっきも書いたけど美しくないしわかりづらいんじゃないの?

数年前はもっと理解してる人が少なかった
リアルで合う人の9割ぐらいの人は誤解してたかわからないと言ってた

ググって上位に出てくるいくつかのサイトも間違いを助長するような内容ばかりだったので
誤解するのも仕方ないかなって思ったなあ
0428デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/07(水) 00:01:47.29ID:qsaRvVqe0
>>424
なるほど 最初は、async/awaitの発想って非同期処理を同期処理のように見せることだと思ってた。
(結局これが正解なのね)

Webを漁っても、元々の動機からずれていくような気がしてたんだけど、
awaitで非同期処理を挟むけど同期処理をしているものと思えば、
当初の動機との整合性は取れる。
で、async/awaitの関数は(TestAsync)と書いたものは非同期なのだから
当然呼び出し元は、そのまま動いていくと。

これで、自分の中では大きなとこの整合性はとれたのかな
0430デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/07(水) 00:20:23.00ID:qsaRvVqe0
>>425
BackgroundWorkerからasnc/awaitに飛んだから
Taskすらまともに理解していなんだけど、

TaskSchedulerとSynchronizationContextはキーワードとし覚えてる
レベルアップするために、そこを解説したものを教えてください。
0431デフォルトの名無しさん (ワッチョイ 4e80-mY15)
2018/11/07(水) 00:35:56.72ID:+978RLDn0
>>406-407
cmd.exe とか、特定の命令を半角で書くと、5ch は受け付けない。
ちょっとした英単語の書き込みでハッキングされるとか、5ch の運営は、アホなんだろう

Mango 板で、単語の絞り込みのテストができる

例えば、ドットなら、💩e みたいな文字参照を使えば、書き込める

cmd💩eexe
0433431 (ワッチョイ 4e80-mY15)
2018/11/07(水) 00:40:03.17ID:+978RLDn0
16進数の2e は間違い。ウンコが表示されたw

例えば、ドットなら、10進数の. みたいな文字参照を使えば、書き込める

cmd.exe
0434デフォルトの名無しさん (ワッチョイ 4e81-mm7G)
2018/11/07(水) 00:41:05.63ID:NkMDfY750
>>429
俺も純粋にvarの理解すら怪しいのにasync周りが難しいってそんなもんじゃないかな?って思っただけなんすけどね
別に批判的に見てるつもりはなくて俺もasync周りは難しいと思ってる
0435デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/07(水) 01:11:44.95ID:qsaRvVqe0
>>434
>俺も純粋にvarの理解すら怪しいのに
逆に聞くと、varってどう誤解するの?もっとも俺はvarを誤解してるかもしれないけどw

余計誤解されるかもしれないとおもって書かなかったけど
解説しておくとすると、そこはシンタックスシュガーだと思ってた Task.Resultを返す
だから、上のほうで、本来ならコンパイラーエラーを出すべきだと書いたのも そこら辺の理由
他の人も指摘してるけど、そこはawaitを書くべきだと自分も書いたのも、あるべき姿はそっちだろうと思ってたから

実際には、動かした段階で、Task<bool>なのは知ってたんだけど そこで気づくべきだった。
とは思うけど、誤解する心理とはそういうものだと思う。

ちなみに、本当にasync/awaitで知りたいのは モナドとの関わりあい
F#ではコンピュテーション式で、async/awaitが実装されてるらしいんだけど
どう実装されているのかが知りたい。
0436デフォルトの名無しさん (ワッチョイ 4e81-mm7G)
2018/11/07(水) 01:29:03.21ID:NkMDfY750
>>435
まずvarはシンタックスシュガーじゃないよ
メソッドの戻り型を自分で定義してるのになんでTask外れると思ったの?
定義した型と違う型が返ってくるなんて言語仕様そのものからかわっちゃうじゃない
asyncなんか関係なくTask<bool>型を返すメソッドを作って、その戻り値をbool型に入れるって、あれ?ってなるよね

どんな環境でテストしてるのかわからんけどVSとかIDEならvarの上にマウスオーバーすれば型教えてくれるよ?
0437デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/07(水) 01:42:24.43ID:qsaRvVqe0
>>436
>まずvarはシンタックスシュガーじゃないよ
というのは、どこで判断するの?
シンタックスシュガーか否かなんての 言語仕様以外の判断基準って存在するの?
delegate、匿名メソッド、ラムダ式周りなんて、旧バージョンでは許されなかった
代入が普通に許されてなかったっけ?
疑問に思った全てを、MSDNで確認するわけではないよね。

>定義した型と違う型が返ってくるなんて言語仕様そのものからかわっちゃうじゃない
いやvarだから定義すらしてないし、脳内変換では、boolだと思い込んでるから

>どんな環境でテストしてるのかわからんけどVSとかIDEならvarの上にマウスオーバーすれば型教えてくれるよ?
だから、テストした段階で、気づいていると>>435にも書いたんだけど これは、今回の一連の質問以前に知ってた
実際には、retに何が入るのかは気になるからローカルウォッチで見た
だから、コンパイルエラーの方が本来の姿だと思ってたけど…
0440デフォルトの名無しさん (ワッチョイ 4e81-mm7G)
2018/11/07(水) 02:07:33.40ID:NkMDfY750
>>437
>async Task<int> TestAsync()
TestAsyncメソッドの戻り値をTask<int>型と定義したのは君だよ?
varは右辺から型を推論する、メソッドが○○型を返しますって定義されてるからその型になる
0442デフォルトの名無しさん (ワッチョイ 97d3-QXT6)
2018/11/07(水) 07:40:05.39ID:Nn5ja2xC0
まあvarとawaitの合わせ技で混乱すると言うのはわからん話じゃない
C++でautoとPPLを絡めると俺も怪しい時があるし

コンパイルが通るコードを
コンパイルエラーになって欲しいと妄想したコードに勝手に改変して
コンパイルが通ると主張して出してきたくだりはさっぱりわからんがw

>>438
https://i.imgur.com/T2Wmm9g.png
出るぞ
べつに型名スペルミスしててもusingなくても出るぞ
0445デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/07(水) 10:07:36.67ID:qsaRvVqe0
>>440
一応、以下は煽りのつもりは無いんだけど

実は未だに混乱してるんだけどね varのとこw

var ret=await TestAsync() とawaitをつけると、bool
var ret=TestAsync() とawaitをつけないと Task<bool>

とか、でも、TestAsync()関数内のreturn retはboolなんだぜ
混乱しないか?var ret=TestAsync()の方が、
普通の関数ぽいからこっちの方がboolぽいという見方もできるし
0446デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/07(水) 10:37:39.04ID:qsaRvVqe0
これで最後にするけど、

多分初心者にとって誤解を与えるのは、
”非同期処理を同期処理のように扱える” わけではないと思う。

きちんと、Taskを理解したうえでasync/awaitに入らないと、誤解する可能性があるということ
awaitを魔法の言葉のようにとらえると、誤解の森をさまようってしまうって感じかな
awaitできるのは、Task型に対してで決して普通の関数に適用できるわけではない。

async/awaitの書式が自然に思えるのは、Taskから入った人
そこを飛ばす人間にとっては、”非同期処理を同期処理のように扱える”が逆に誤解を与える
0447デフォルトの名無しさん (ブーイモ MM7f-0Z6C)
2018/11/07(水) 10:37:56.63ID:+HyKX3eQM
>>435
F#の computation expression でも let! ret = Async.AwaitTask (TestAsync()) で ret が bool になるんだが?
君には抽象化という考え方は難しいようだね
そんなんじゃF#なんか夢のまた夢だぞ
0448デフォルトの名無しさん (スップ Sd5a-mm7G)
2018/11/07(水) 10:51:40.13ID:DKcaR4dnd
>>445
右辺の型が違うんだからvarによる型推論の結果も変わるだけ
varの話をしてたのにawaitによる処理の話にすり替わってる

retがboolだろうがなんだろうがメソッドの戻り型はTask<bool>と定義したんだろ?
じゃあ疑問が出るのはメソッドの呼び出し箇所じゃなくて実装箇所じゃないの?
なんで戻り型はTask<bool>なのにreturn boolでおkなんだろう?って
ここにvarなんて関係ないのにごっちゃにするから話がこじれる
0449デフォルトの名無しさん (ササクッテロ Spbb-YFvO)
2018/11/07(水) 11:06:26.88ID:pyY+8g+op
>>445
async関数を書く立場と使う立場でごっちゃにし過ぎ

> var ret=TestAsync()の方が、普通の関数ぽいからこっちの方がboolぽいという見方もできるし
そんな見方はできないよ
関数を使う側は戻り値のシグニチャに従うだけだ
逆にawait式の戻り値がTaskじゃないのが直観的じゃない、と言うなら初心者視点に限って見ればまだ理解はできる

とは言え型推論のvarが非同期機能のawaitまで勝手に面倒を見てしまうという妄想を
まるで仕様により勘違いを誘発されたかのように語るのはお門違いだな

基礎を疎かにしているのに最短距離だけ求める欲求が強すぎるて歪んでいる
0450デフォルトの名無しさん (オイコラミネオ MMe3-a/N+)
2018/11/07(水) 11:10:22.09ID:pVsScpvPM
varはわざわざ型名書かなくて済むためのシュガーだと思うの
当然、型が自明か気にしなくて済むくらい明瞭なコードなら、可読性も満たす

書き方で型が変わるシチュで、
変数名もretにして混乱してたら本末転倒かと
0451デフォルトの名無しさん (スップ Sd5a-mm7G)
2018/11/07(水) 11:21:51.89ID:DKcaR4dnd
asyncが難しいことを誰も否定していないのに勝手に初心者でも理解できると解釈して、そんなことない!って文句垂れてるようにしか見えないんだよね。
基本や順序すっ飛ばして全部一気に詰め込むなんて土台無理な話なのに
0454デフォルトの名無しさん (アウアウカー Sac3-U2lQ)
2018/11/07(水) 11:44:16.22ID:h4FWJh3Ka
読んでてHaskellのIOモナドみたいとか思った。
asyncが>>=でawaitがreturn。
(Haskellのreturnは戻り値にIOを被せる)

実行順序がコード通りとは限らないと言う意味では遅延評価も非同期か。
0455デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/07(水) 11:46:01.13ID:qsaRvVqe0
一応読んでるよ〜

>>452
そこもまだ混乱してるんだけどね
var tas=TestAsync()
bool ret=tas.Result
とすると、デッドロックするんでしょ 理由は分かってるから説明不要

var ret=await TestAsync()
ならOKとか。違いがわかりづらい
0458デフォルトの名無しさん (アウアウカー Sac3-U2lQ)
2018/11/07(水) 11:57:23.58ID:h4FWJh3Ka
>>454
あ、asyncとawaitの>>=とreturnの関係逆だった。
0459デフォルトの名無しさん (アウアウカー Sac3-U2lQ)
2018/11/07(水) 12:11:39.88ID:h4FWJh3Ka
要するにさ。
時間かかり過ぎる処理がUIスレッド占有するとプログラム上正常でもユーザーからは固まったように見えるから、非同期でUIスレッドから切り離してしまいましょうって機能でしょ?

asyncで別スレッドに切り離して、直後のコードで押したボタンとか無効化しておいて、答えが返ってきたら有効化する。みたいな。
(だからUIスレッドは他の操作もできるけど、await付きメソッドは(async部分以外は終わってるけど)async返るまで正式な終了では無い。みたいな。
んで、UI弄るのはUIスレッドのみって縛りを解決する為にSynchronizatrionContextがあると。

齧った限りはそんな理解。
0461デフォルトの名無しさん (アウアウエー Sa52-uVrJ)
2018/11/07(水) 12:29:37.11ID:GX8LMMiJa
>>446
まあ気持ちは分からんでもないけど、「非同期処理を同期処理のように扱える」なんて
宣伝してる人はいないよね。
大概の記事は「同期処理のように<書ける>」となってるんではないか。

違うかもしれないが、あなたはasyncで修飾されたメソッドの内側の視点と、
外側からの視点の区別がついてないんじゃないか。

「同期処理のように<書ける>」というのは、あくまでasyncで修飾されたメソッドを
書いてる時の、内側の視点に立った場合の話。

先にTaskをある程度知らないと混乱するのはその通りかもしれないが、
知らなくても「async/awaitの書式が自然に思える」とは思うけどな

>>455に書いてるような落とし穴が分かりづらいのはその通りだしたぶん大方が同意するところ。
だから非同期メソッドは糞、と言いたいならそれはないんじゃないかと
0464デフォルトの名無しさん (ワッチョイ 3eeb-ZA70)
2018/11/07(水) 16:08:24.07ID:RZxjCpbR0
C#に関しては特にそうだけど、QiitaとHatenaは検索から除外したほうが良いよ
0470デフォルトの名無しさん (ワッチョイ 4ee8-MyS3)
2018/11/07(水) 22:24:06.37ID:EkNn3I7h0
デバッグ時にスレッド数分のウィンドウが出て
一斉かそれぞれでステップインしていけたりしないかなあ
0471デフォルトの名無しさん (ワッチョイ 5b80-Q1ft)
2018/11/07(水) 23:36:12.44ID:fWOqg0Pc0
頭ワルイヤツが頭ワルイ日記を読んで
ネトウヨやパヨチョンや放射脳になる

コレと同じ

タチがワルイ頭ワルイのが量産される
コレは低学歴知恵遅れに顕著
0473デフォルトの名無しさん (スッップ Sdb3-RZyg)
2018/11/08(木) 07:53:34.07ID:HzGiMKkRd
配列について。
例えばクリックイベントが起こるたびに配列に1つずつ入れたい時、使いたい1次元配列を宣言して、要素数を1つずつ増やしたいときってどうすればいいですか?
0476デフォルトの名無しさん (アウアウカー Sa9d-Gc0T)
2018/11/08(木) 08:16:23.72ID:Tu3rCJEka
>>473
whileの代わりにイベント使うと考えればおk
0483デフォルトの名無しさん (ササクッテロル Spcd-WqUE)
2018/11/10(土) 09:47:43.85ID:sUbsN3PYp
質問します。
C#初心者。プログラミング初心者です。
よろしくお願いします。

csvファイルがあって中身は

a,b,c,d
e,f,g
h,i,j,k,l,m,n

のような
行によってカンマの数(1行ずつ読み込んで配列に入れた場合は要素数)が違います。

プログラグの処理としは
このcsvファイルをの内容を1行ずつ読み込んで
xmlまたはjsonファイルに変換したいのですが
どのような処理をすれば
行によって要素数が異なるこのデータ達を
変換できるでしょうか?

よろしくお願いします。
0485デフォルトの名無しさん (ササクッテロル Spcd-WqUE)
2018/11/10(土) 09:59:03.63ID:sUbsN3PYp
Splitメソッドで配列に格納するところまではできてますが、その後の要素数の異なる配列を
xmlやjsonの要素に入れる際の処理のコードが腫れ上がって困ってます。
配列の要素数のパータンに応じて
If (配列の要素数=3){…}
else If(配列の要素数=4){…}
else If(配列の要素数=5){…}

のように
配列の要素数に応じてコード量が
多くなってしまいます。

他に処理の仕方はございますか?
0486デフォルトの名無しさん (ササクッテロル Spcd-WqUE)
2018/11/10(土) 10:31:22.39ID:sUbsN3PYp
If(3<配列の要素>7){


オブジェクト名.xmlのタグ名1= 配列名[0];
オブジェクト名.xmlのタグ名2= 配列名[1];
オブジェクト名.xmlのタグ名3= 配列名[3];
オブジェクト名.xmlのタグ名4= 配列名[4];
オブジェクト名.xmlのタグ名5= 配列名[5];


のようにすると
配列の要素数とxmlのタグ数が違う場合にエラーがでてしまいます。

例えば上記のコードだと
配列の要素数が5以外の場合はエラーになります
0488デフォルトの名無しさん (ササクッテロル Spcd-WqUE)
2018/11/10(土) 11:21:38.15ID:sUbsN3PYp
ルコード
namespace Sample.model
{
public class PersonModel
{
/// <summary>
/// ID
/// </summary>
[System.Xml.Serialization.XmlAttribute("id")]
public String ID { get; set; }
/// <summary>
/// 名前
/// </summary>
[System.Xml.Serialization.XmlElement("firstname")]
public String FirstName { get; set; }
/// <summary>
/// 苗字
/// </summary>
[System.Xml.Serialization.XmlElement("lastname")]
public String LastName { get; set; }
/// <summary>
/// 誕生日
/// </summary>
[System.Xml.Serialization.XmlElement("birthday")]
public String Birthday { get; set; }
}
}
0489デフォルトの名無しさん (ササクッテロル Spcd-WqUE)
2018/11/10(土) 11:23:23.72ID:sUbsN3PYp
ファイルを読み込み処理
.
.
string data =1行ずつ読み込みこんだデータ;
string xml[]= data.Split(,);

/シリアライズする為のPersonsインスタンスを生成
Sample.model.PersonsModel model = new Sample.model.PersonsModel();
model.Persons = new List<Sample.model.PersonModel>();
//インスタンスに値を設定
// Persons1
Sample.model.PersonModel person1 = new Sample.model.PersonModel();

If (3<配列の要素数<8){

person1.ID = data[0];
person1.FirstName = [1];
person1.LastName = [2];
person1.Birthday = [3];
model.Persons.Add(person1);


//出力先XMLのストリーム
System.IO.FileStream stream = new System.IO.FileStream(@"D:\DATA\EXPORT.XML", System.IO.FileMode.Create);
System.IO.StreamWriter writer = new System.IO.StreamWriter(stream, System.Text.Encoding.UTF8);

//シリアライズ
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Sample.model.PersonsModel));
serializer.Serialize(writer, model);

writer.Flush();
writer.Close();
0491デフォルトの名無しさん (ササクッテロル Spcd-WqUE)
2018/11/10(土) 11:27:19.41ID:sUbsN3PYp
person1.ID = data[0];
person1.FirstName = [1];
person1.LastName = [2];
person1.Birthday = [3];
model.Persons.Add(person1);


ここの処理に困っています。
この場合は読み込みだデータの配列の要素数が4以外の場合エラーになります。
エラー原因は要素が4未満の場合は
指定したxmlのタグの数に満たないためだと考えられます
0492デフォルトの名無しさん (ササクッテロル Spcd-WqUE)
2018/11/10(土) 11:28:55.94ID:sUbsN3PYp
間違えました
data[0]ではなく
xml[0] でした
0493デフォルトの名無しさん (ササクッテロル Spcd-WqUE)
2018/11/10(土) 11:33:51.32ID:sUbsN3PYp
>490
ご指摘ありがとうございます。

要素数が異なる配列を
xmlタグ要素に入れる処理の
ご指摘を頂けると幸いです。

読み込んだ1行のデータの配列の要素が異なる場合の処理はどのように書くのがスマートでしょうか?
0494デフォルトの名無しさん (アウアウウー Sa05-I2rI)
2018/11/10(土) 12:23:15.91ID:h+MQ7FTQa
>>491
要素が足りない場合に、Birthdayなどをどう書き込むべきかによる
何かしらの既定値を書き込みたいなら
string GetOrDefault(string[] xml, int index, string defaultValue)
{
if (0 <= index && index < xml.Length) { return xml[index]; }
return defaultValue;
}
のような補助メソッド作って
person1.Birthday = GetOrDefault(xml, 3, "1000/01/01");
のように取得する

要素が足りない場合にはBirthdayなどを書き込まないなら
xml出力の方では、PersonModelクラスのメンバーにDefaultValue属性を付けて
その属性で指定した値を格納しておけば書き出されなくなる
JSONの方も同じように書き出さないように出来ると思う
0495デフォルトの名無しさん (ドコグロ MM1d-7vdd)
2018/11/10(土) 12:35:22.80ID:2+OzQsKxM
>>493
サルなの?
仕様も決めないでどうやるもこうやるもねぇよ
じゃあ、全部key,valueでいいよ
csvに存在するすべての要素をkey,valueで出せ
keyのフォーマットはcolumn-rowな
xmlでのタグ名はdata
属性はkeyとvalue
0496デフォルトの名無しさん (アウアウウー Sa05-8u3a)
2018/11/10(土) 13:04:57.13ID:q+mWhUVWa
>>493
var persons = File.ReadAllLines("file.csv")
.Select(line => { var a = line.Split(","); Array.Resize(ref a, PROP_COUNT); return a; })
.Select(a => new Person() {
ID = a[0],
Name = a[1],
...,
LastProp = a[PROP_COUNT - 1]
});

var json = JsonConvert.SerializeObject(persons);
0497デフォルトの名無しさん (ワッチョイ 4b33-mDL8)
2018/11/10(土) 15:54:29.53ID:48CyTBFD0
jsonって名前=値ペアの連想配列は順序が保証されないので
順序を保証したい場合は配列で囲って [{名前: 値}{名前: 値}] みたくすると思うんですが、
データ保存用途として見た場合使い難くないですかね?
シリアライズした時も処理系によって順序が保証されないから単純diff比較も使えずパースして比較する必要がありますよね
これって問題にならないんですか?
0501デフォルトの名無しさん (ワッチョイ 4b33-mDL8)
2018/11/10(土) 18:05:23.42ID:48CyTBFD0
たとえばweb屋なら画面のチェックボックスとかの状態をjsonでデータ管理するとして
そのデータから設定仕様書とかを起こす時に困るんじゃないかな
なんかここだけアルゴリズム依存で時代と逆行してるような気がしてイマイチなんですよ
0508デフォルトの名無しさん (ワッチョイ 8981-zc6X)
2018/11/10(土) 19:01:40.71ID:/crW2tCF0
c#とオブジェクト指向の勉強にオススメの本ありますか?
今まで組み込みのcばっかやってきたので、こっちの世界の定石みたいなものを身に付けたいのです
0510デフォルトの名無しさん (ワッチョイ 19b3-YP9l)
2018/11/10(土) 21:28:30.80ID:lx5S0cHm0
>>491
jsonいじらないと細かいことわからんけど
while とswitchつかうとか?
繰り返す回数はxml.length
i=0の場合はperson1.ID=data[0]
エラーは配列が存在しないから出てるんじゃね
0511デフォルトの名無しさん (ワッチョイ e19d-otFY)
2018/11/12(月) 20:04:46.62ID:q8PdpD4Q0
public List< string > textsplit(string strdata) {
var ls = new List<string>();
ls.Add("1"); ld.Add("2");
return ls;
}
関数内部でNewしてそれを戻しても問題ない?
0514デフォルトの名無しさん (ワッチョイ 41eb-AS2U)
2018/11/12(月) 20:29:35.59ID:Fg4ONeCp0
それって他の言語だとまずいん?
0519デフォルトの名無しさん (ワッチョイ e19d-otFY)
2018/11/12(月) 21:02:40.60ID:q8PdpD4Q0
戻した後で使うんだが使うのが翌日になっても大丈夫?
1日に一回だけUPする場合、そういう可能性がある。そのときにガベージコレクション
されて無くなってるってことない? 関数を抜けてるので。
0523デフォルトの名無しさん (ワッチョイ 89fa-JV4m)
2018/11/12(月) 22:11:23.36ID:k/0PxRaR0
Listみたいな参照型は実体はヒープに確保されてスタック上にあるのはそれを指すポインタだけ
ガベージコレクションされる可能性があるのは関数を抜けた時ではなくそのオブジェクトへの参照が1つもなくなった時
親関数が戻り値を受け取る事で新たに参照が出来るので、子関数が終了しても消えない
0524デフォルトの名無しさん (アウアウエー Sa23-ApEQ)
2018/11/12(月) 22:28:48.44ID:JxfhNlMua
>>523
違う。それで済むならGCなどという大層な仕組みは必要なく、単なる参照カウンタで十分。
循環参照の場合は、オブジェクト参照まだ残っていてもGC対象となる必要がある。
正しくは、GCされる可能性があるのは、スタックまたはstaticフィールドから参照を辿れなくなったときだよ。
0525デフォルトの名無しさん (アウアウカー Sa9d-Gc0T)
2018/11/12(月) 23:52:29.85ID:D6ILV7Jxa
>>516
その為のstatic。
static付いたローカル変数はスコープはローカルだけど、
寿命はグローバル変数と同じ、宣言されてからプログラムの終了までになる。
0531デフォルトの名無しさん (ワッチョイ e19d-otFY)
2018/11/13(火) 01:19:58.69ID:ADQqJemu0
Methodを渡すのになんでFunc<string,int> fnc みたいになったの?
string Func <string> fncの方が分かりやすいと思うが、、
0532デフォルトの名無しさん (アウアウカー Sa9d-Gc0T)
2018/11/13(火) 02:01:53.20ID:bZ0HXQ7Xa
>>526
ポインタや参照返してたらC#もCも危険性変わらんよ。
ガベコレされるまで危険なのは同じ。


と言うかポインタは普通返さない。
void関数なりメソッドで入力用のポインタ(参照)と出力用のポインタ(参照)を引数に取る。
0534デフォルトの名無しさん (アウアウエー Sa23-2y03)
2018/11/13(火) 02:12:38.95ID:1GLtCoZ4a
>>532
何を言ってるのかさっぱり分からんけど>>518

>>528の人もなんか勘違いしてるっぽいので論点整理

char *int_to_str(int x)
{
  char buf[20];
  sprintf(buf, "%d", x);
  return buf;
}

これのどこがマズいか分かります?
>>511の人はこれと同類の落とし穴がC#にもあるのか心配してると思ったわけ
0535デフォルトの名無しさん (アウアウカー Sa9d-Gc0T)
2018/11/13(火) 02:20:42.52ID:bZ0HXQ7Xa
>>534
return抜ける時にchar[20]が消えちゃうんでしょ?
んで、そう言う時にreturn抜けても消えないのがstatic char[20]
0537デフォルトの名無しさん (ワッチョイ f9c3-uQDt)
2018/11/13(火) 02:26:43.91ID:7xmY+SYc0
>>534
それじゃあ>511と問題が違うだろw
だから、ポインターの戻り値なんてレジスタで帰るから気にすんなって話。それにnewしたオブジェクトはヒープに取られるんだから、スタックだって気にしなくていいぞ。
0538デフォルトの名無しさん (アウアウカー Sa9d-Gc0T)
2018/11/13(火) 02:28:55.08ID:bZ0HXQ7Xa
んで、今度は呼び出元全部がchar[20]と同じに(1回目も2回目も2回目と同じ値に変化する?)なりかねないので、通常

void int_to_str(int x,char* str)
{
  sprintf(str, "%d", x);
}

と言うふうに、出力用のポインタ引数用意する。
0539デフォルトの名無しさん (アウアウカー Sa9d-Gc0T)
2018/11/13(火) 02:31:57.72ID:bZ0HXQ7Xa
>>536
言ってること同じやん( ´Д`)y━・~~
0540デフォルトの名無しさん (アウアウエー Sa23-2y03)
2018/11/13(火) 02:32:00.35ID:1GLtCoZ4a
>>537
だからレジスタで返るとかそういう問題じゃないんですがw

問題が違うのは当たり前w
だから、C#にも>>534と同類の落とし穴があることを心配しているんじゃないかなと思って
>>516みたいに書いたわけ

もちろん別のことを心配してるのかもしれん。

>それにnewしたオブジェクトはヒープに取られるんだから、スタックだって気にしなくていいぞ。
だから最初からそう言っていますw
0542デフォルトの名無しさん (アウアウエー Sa23-2y03)
2018/11/13(火) 02:38:05.39ID:1GLtCoZ4a
たぶん>>537の人はポインタと左辺値の区別がついてないんじゃないのかな。
これはポインタって言葉の使い方が混乱してるからしょうがないけど

それともそもそもスタックとかポインタの意味が分かってないのか
0543デフォルトの名無しさん (ワッチョイ b37e-YP9l)
2018/11/13(火) 02:38:54.17ID:p27/Ddjo0
C#のnewに相当するのはC++でもnewだし、C#でもstackallocでスタック配列は可能
しかもローカル変数のアドレスを取得し返すコードもunsafeならビルドできる
返すものが抜けるスタックだと不正なのはレジスタも呼出規約も言語も関係ない

C++でもお行儀はともかく適切にdeleteすれば済むし、C#ならGCが回収するってだけ

>>531
戻り値たるintとかどっかいってる上に奇妙な文法増えちゃうよ
0544デフォルトの名無しさん (アウアウカー Sa9d-Gc0T)
2018/11/13(火) 02:49:42.48ID:bZ0HXQ7Xa
>>541
言い過ぎだとしても、>>538的な方が普通な気がするが。
試しに普通のポインタ返す関数を。。。とここまで書いて関数ポインタ思い出した。

でも通常かと言うと疑問。
組込関数にもあるけど、それを通常と言って良いかどうか。
それと同じ仕組みの関数作るのが通常とは思えない。
0545デフォルトの名無しさん (スッップ Sdb3-RZyg)
2018/11/13(火) 07:44:20.95ID:4VfxC09pd
ピクチャーボックスに書いた線の座標を配列にいてれおいて、右クリックの時に一つ前に書いた線を消したい時って再描画させるにはどうしたら出来ますか?

配列の最後を消して配列要素分ループして書いても書けず、前の書いた線が残りっぱなしでやり方が分かりません。
0549デフォルトの名無しさん (アウアウエー Sa23-2y03)
2018/11/13(火) 12:26:10.47ID:oXvGF3Wua
>>545
なんか、何回も同じようなこと聞いてない?

private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
  if (e.Button == MouseButtons.Right) pictureBox1.Invalidate();
}

そんで描画処理はPaintイベントに書く

Windowsの描画の基本は、他のウィンドウが重なるなどして描画した絵が消されたら
(無効化されたら)その都度再描画。
プログラムの都合で再描画が必要な場合がInvalidate()等を呼んで強制的に無効化する。

PictureBoxは無効化されたら自動で背景色か背景画像で塗りつぶされるはず。
だから前に書いた線を消す必要はない
0552デフォルトの名無しさん (アウアウカー Sa85-ZFLo)
2018/11/15(木) 03:05:16.76ID:lNkjj0jra
メモリ上にビットマップ展開、そこに描画して画面はメモリ上のビットマップを表示するだけ。
画面の大きさ分のビットマップでメモリ喰うけど、再描画に時間取られない。
0554デフォルトの名無しさん (ワッチョイ ca9f-maOp)
2018/11/15(木) 07:16:16.62ID:AUtHx5s50
前に画面の選択範囲のスクリーンショットとる機能作った時に一番苦労したのが
選択範囲を示すための四角の点線をうまく表示することだったわ
0555デフォルトの名無しさん (アウアウカー Sa85-ZFLo)
2018/11/15(木) 12:43:10.25ID:lNkjj0jra
>>553
今はどうか知らんが、昔は定番テクニックだったよね。-> >>552
0557デフォルトの名無しさん (アウアウエー Sab2-mgxK)
2018/11/15(木) 13:22:50.19ID:lrjlJOeNa
>>555
553が言ってるのはXOR描画じゃないの?
Win9x時代はエクスプローラ等でアイテムの選択状態を表す時や、>>554が言ってる
ラバーバンドの簡易的な実現方法として利用されてたと思う

リソースが貧弱だった時代に高価なビットマップを保持するなんて愚策を
定番にしていた人がそうそういたとは思えんね

それやってたの、即時モードの描画が理解できなかった、98時代のおじさん
だけだと思う

っていうかWin32ってもう20年以上歴史があるんだからいい加減>>552みたいな
発想は卒業したらどうなんだろう

これ、WPFみたいな保持モードの考え方と全然違うよw
0558デフォルトの名無しさん (アウアウカー Sa85-ZFLo)
2018/11/15(木) 13:23:12.34ID:lNkjj0jra
Direct2Dとかだっけ。
触った事ないなぁ。。。

ペイントっぽいアプリとか程度だったら、どっちが楽なんだろ。。。
0559デフォルトの名無しさん (アウアウカー Sa85-ZFLo)
2018/11/15(木) 13:29:33.73ID:lNkjj0jra
>>557
ううむ。そうか。
でもウィンドウが重なったらXOR以前に再描画するものが消えてるんだが。。。

確かに翁とか愛称ついてるあたり古い考えの人だった気もするが、当時でも有効だったなら
今では解像度はタブレット以下が多い割にメモリ積み放題だし、昔より手軽な割に有効だと思うんだが。。。
0560デフォルトの名無しさん (アウアウカー Sa85-ZFLo)
2018/11/15(木) 13:33:22.82ID:lNkjj0jra
あ、WPFが別物ってのは理解出来る。
とはいえ、ペイントもどき作ってないからどうだろ。。。
HTML5のCanvasの仕組み次第だな。
少なくとも、Formsでは今でも有効。-> >>552
0561デフォルトの名無しさん (ワッチョイ 869a-2AkZ)
2018/11/15(木) 19:09:16.78ID:qi3FyInE0
画像描画の話題そのものはいいとしてコントロールの描画とImageプロパティへの描画と画面への描画の区別がついていない人がいる気がする
元の質問は「初期化しろ」で終わっているからどうでもいいんだろうけど
0562デフォルトの名無しさん (ワッチョイ 3e67-sNvt)
2018/11/17(土) 17:07:48.79ID:eS8uuMhZ0
https://www.youtube.com/watch?v=Arlz1lgaO-0
こういうソフトってc#ですか?
pythonではきついですか
0565デフォルトの名無しさん (アウアウエー Sab2-2qly)
2018/11/17(土) 17:37:36.65ID:rc62Vrp5a
>>562
こういうのはアルゴリズムが全てで、言語なんかどうでもいい
言語云々言ってるレベルの人には遠すぎる目標だから、いったんもっと手前にマイルストーンを置いたほうがいい
確実に挫折するから
0566デフォルトの名無しさん (ワッチョイ 3e67-sNvt)
2018/11/17(土) 17:55:07.29ID:eS8uuMhZ0
言語は何でもいいんですね
じゃあC#で頑張ってみます

フィボナッチなんとかでしたっけか
0567デフォルトの名無しさん (アウアウイー Sa2d-4yv2)
2018/11/17(土) 17:58:49.17ID:bZFmP2aXa
>>562
無理だろう
リンクを開いたら『かっぱ寿司』のCMだった
寿司は握れない
0568デフォルトの名無しさん (アウアウエー Sab2-2qly)
2018/11/17(土) 18:03:29.40ID:rc62Vrp5a
>>566
勘違いさせてしまったようだが、これを作れるレベルの人なら言語の選択なんか全くどうでもいい些細な問題だという意味だぞ
GUIが一通り使えて3Dのレンダリングができるなら作れるっちゃ作れる
0569デフォルトの名無しさん (ワッチョイ 3e67-sNvt)
2018/11/17(土) 18:10:45.85ID:eS8uuMhZ0
であれば向いているのは、pythonよりはc#ということになりますか?(ただのイメージですが)
0571デフォルトの名無しさん (ワッチョイ 3e67-sNvt)
2018/11/17(土) 18:28:18.79ID:eS8uuMhZ0
c#でdirectxやopenGlを使うのは一般的ではないということでしょうか?
cとかc++は超難易度が高いと聞くのでどうなのかなと思ってました
0573デフォルトの名無しさん (ワッチョイ cd8a-9Fzi)
2018/11/17(土) 18:38:39.23ID:tg8QC7+S0
>>571
最近は知らないけどあくまでC/C++用ライブラリのラッパーがあるだけだから
変なところでつまづく可能性あるのがつまんないじゃん
実装が中途半端だったりするのもあるから
webに転がってるサンプルがそのまま動いた方が楽やろ
C/C++は深みはまれば無限の闇だけどシンプルに使う分にはなにも難しくない
だって大半のプログラマはCから入ってるんだし
Unityは全く知らんからその辺は別の人に
0574デフォルトの名無しさん (ワッチョイ 3e67-sNvt)
2018/11/17(土) 18:41:57.34ID:eS8uuMhZ0
>>572
あくまで1から作ってみたかったので
後ゲームエンジンはgodot使ってたりします

>>573
じゃあCから入ってみます
0579デフォルトの名無しさん (ワッチョイ ca8a-sEjg)
2018/11/19(月) 05:43:43.79ID:r5HrKoSb0
コーディングしてて思うけど変数名とかつけるのがめちゃ難しい
dataとかinfoとか抽象的で何を指してるのかわからんようにならないように
意を示すような単語を探したいが探しきれない

csvファイルを読み込んだバイナリデータを受けとる変数名とかstreamって名前にすべきなのか?
0580デフォルトの名無しさん (ドコグロ MM72-rrJU)
2018/11/19(月) 07:18:33.39ID:bSg94FGhM
>>579
日本語のカタカナのアルファベット表記でよい
お前の脳みそがなんの辞書も持ち合わせていない雑魚だった場合
全クラスの全変数の数分その都度エキサイト翻訳にかける工数が必要になる
1000個以上あればもちろん1000回以上だ
つまり、雑魚なお前はそのくだらん作業で工数の大半を食い潰す
日本語アルファベット表記で妥協しろ
0585デフォルトの名無しさん (ブーイモ MMea-2qly)
2018/11/19(月) 09:13:29.97ID:E9Vggb2iM
名前以前にそもそもパブリックメンバにタプル使うなってガイドラインがあったはずだけど、もうMS自身が破って解禁されちゃうのか
引数のデフォルト値なんかも当初はパブリックメンバには禁止だったはずだけどMSが平然と無視し始めて完全に形骸化したね
0589デフォルトの名無しさん (アウアウエー Sab2-mgxK)
2018/11/19(月) 12:25:52.05ID:fArXgqhAa
>>579
自分で書いているように抽象的な名前であることが可読的でない原因。
そうであればベタベタに具体的な名前を付ければいいでしょう

例えばアップルの株価ならstockPriceOfAppleとか

必要もないのに冗長な名前を付けることはないけど
必要ならたとえローカルでも長い名前を付けることを躊躇してはいけないと個人的には思う
0601デフォルトの名無しさん (アウアウウー Sa91-S6HO)
2018/11/19(月) 19:01:01.30ID:2DWiAtf3a
>>579
>csvファイルを読み込んだバイナリデータを受けとる変数
はstring配列やbyte配列だと思うけど
固有の型へすぐ変換するだろうから、その短い間ならdataなどでいいんじゃないか
個人的にはstreamという変数名ではSystem.IO.Stream型だと思ってしまう
0616デフォルトの名無しさん (ワッチョイ 3903-k2K5)
2018/11/21(水) 21:12:12.58ID:JM/nMfDs0
>>615
レビューしてやってもええけどどのくらい率直に言ってもええんや?
メンタル強い方か?
0620デフォルトの名無しさん (ワッチョイ 3903-k2K5)
2018/11/21(水) 23:20:39.67ID:JM/nMfDs0
よく言った
0623デフォルトの名無しさん (ワッチョイ d3a5-ylOc)
2018/11/23(金) 09:37:10.04ID:ApOE6+zI0
C#はJavaみたく1ファイル/1クラスじゃないけど
皆さんどうしてます?
短いクラスがいくつかあるとき1つのファイルにまとめます?
なんかファイルが多いと読みにくくなるような気もするし
分かれてる方が分かりやすいって人もいるのかな?
0625デフォルトの名無しさん (ワッチョイ ffd2-nmhv)
2018/11/23(金) 09:41:35.57ID:w9GMx5b20
>>623
試行錯誤しながら開発してる時は同じファイルに複数クラス書いて、後からバラす
インターフェイスと実装クラスが一対一で、かつ量が大したことない場合はひとつにまとめたり
0628デフォルトの名無しさん (ワッチョイ d3a5-ylOc)
2018/11/23(金) 10:13:21.65ID:ApOE6+zI0
基本は1ファイル/1クラスで
まとめるのは特別な事情ってのが多数なのかな
ありがとうございました
0633デフォルトの名無しさん (ワッチョイ cf81-xbeM)
2018/11/23(金) 13:00:59.52ID:OqByd5h70
>>630
まあこれは半分冗談なんだけどさ、リファクタリングしてコード短くしたら見積もり下がるじゃねーかと先輩に怒られたとかそーゆう話をネットで見たことがあるのでね。高くするためにファイル数増やしてるなんてことない?って話
0642デフォルトの名無しさん (ワッチョイ ff7f-wvC2)
2018/11/23(金) 18:11:36.90ID:t3Fo6DVq0
>>641
usingもnamespaceも使わないの?
どんな小さなclassだってそれなりの規模の中に入れればそれなりの行数消費する
class辺りの最低行数を上げれば見積もりだってあがるだろ?
こんな細かく説明必要なの?こんなどうでもいい内容で?
0646デフォルトの名無しさん (ワッチョイ 6f7f-NVvz)
2018/11/23(金) 19:15:37.38ID:+XjaJ0Hq0
>>639
そのほうがSCM上扱いやすい
ファイル一覧からクラス探しやすい
conflictマージが楽
プロジェクトチーム内でPG毎に好き勝手にやると一貫性がなくなる
といったところかな
とはいえ結合の強いクラスとかパラメーター系のクラスは一緒にするけども
0647デフォルトの名無しさん (ドコグロ MM1f-I6zH)
2018/11/23(金) 19:26:33.26ID:EY7/YwthM
>>646
> そのほうがSCM上扱いやすい
理由が書いてない

> ファイル一覧からクラス探しやすい
IDE使ってないのか?

> conflictマージが楽
変わらんと思う

> プロジェクトチーム内でPG毎に好き勝手にやると一貫性がなくなる
予め決めればいいだけじゃないの?
0650デフォルトの名無しさん (ワッチョイ ff7f-wvC2)
2018/11/23(金) 20:38:29.58ID:t3Fo6DVq0
そもそもコード量で見積もりするようなプロジェクトやったことないけど
namespaceやusingって独自でフレームワークレベルまで全部構築するような大きい案件のほうが無駄に行数稼げそうだなーって感覚

そもそも見積もり上での影響の大きさなんか話題になってないよね
どうでもいい糞ルールで売上1%あがりましたー、みたいな話じゃん
広い世の中、そんな案件もあるんじゃないかなー?って思っただけでなんでこんな噛みつかれるんだ?
0658デフォルトの名無しさん (ワッチョイ cf81-xbeM)
2018/11/24(土) 13:19:32.37ID:QDlc1GIX0
>>652
>>657
こいつ多分勉強出来ないタイプ。
C#の関連書籍にはnestedclassなんて単語は出てこない。
更に用語で検索するとむしろjavaよりの言葉であることが判明。つまり、にわかの誤った認識でドヤ顔しちゃう可哀想な典型。以降スルー推奨
0666デフォルトの名無しさん (ワッチョイ 231e-nwd5)
2018/11/24(土) 15:24:23.92ID:MaS7Khub0
だよな。普通に訂正、反論するだけでなんでもかんでもかんでもマウントはないよな。
喧嘩ごしでやってるならマウントって言ってもわかるけど。
だから>>652は別にマウントでもないな。まあ細かいとは思うが
0667デフォルトの名無しさん (ワッチョイ c336-CvEX)
2018/11/24(土) 15:50:14.83ID:X9wbQk6q0
初心者向けC#のサイトでGUIプログラムの例があったので入力してみました。
しかし
 using System.Windows.Controls;
でコンパイルエラーになります。 Controlsなんてネーヨ!エラーです。
正しくは、どこでしょうか?
ちなみに環境なんですがubuntu16で、MonoDeveloperを使っております。
0668デフォルトの名無しさん (アウアウウー Sa27-tiSx)
2018/11/24(土) 16:05:53.32ID:KjMkY0qza
>>667
System.Windows.Controls名前空間以下の型(例えばControlクラス)は
PresentationFramework.dll というDLLで定義されているから
そのDLLを参照に追加する必要がある
どの型がどのDLLに属しているかは、MSDNやMicrosoft Docsでその型のページを探して
上の方にあるAssemblyの箇所を見ればわかる
例えばControlの場合は https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.controls.control?view=netframework-4.7.2

ただ肝心の、MonoDeveloperで参照を追加する方法は俺には分からない
0674デフォルトの名無しさん (ワッチョイ ff9b-ZAsc)
2018/11/24(土) 16:59:12.41ID:ntzumrir0
2点ほど、
pictureboxに書いた線やらマルやらを書き終えたらボタンを押しもう書けないようにロックするにはどうしたらいいですか?

フォーム2で書いたpictureboxの絵をボタン投下時にフォーム1に同じ絵をコピーしたい場合はどうしたらいいですか?
0676デフォルトの名無しさん (ワッチョイ cf9a-81xu)
2018/11/24(土) 17:08:20.29ID:EV3fc7VB0
>>674
最初のはpicturebox.Imageを書き込み不能にしたいってこと?そっちはわからない
2つめのは用途による
picturebox2.Image=picturebox1.Image;//これは1を書き換えるとそのまま2に反映される
picturebox2.Image=new Bitmap(picturebox1.Image);//これはいわゆる普通のコピー
ImageがBitmapでなくMetaFileならこれは使えないけど
0683>>676 (ワッチョイ cf9a-81xu)
2018/11/24(土) 21:38:37.28ID:EV3fc7VB0
>>676にキャスト不足とか誰も突っ込んでくれないw

>>674
Form1で書いたpictureboxの絵をボタン投下時にForm2に同じ絵をコピーの例
https://ideone.com/ifdvrf
Visual StudioでC#の新しいプロジェクトを作って自動生成されたcsを全部消して代わりにダウンロードしたcsを既存の項目として追加して実行
Form1ではマウス左クリック+ドラッグで描画、Form2でCopyをクリックするとその時点のイメージをコピー
Enableのチェック外すと描画中止
0684デフォルトの名無しさん (スップ Sd1f-cRgy)
2018/11/26(月) 11:03:50.04ID:SESNl2J0d
何だかんだでc#の勉強を始めることになったんですけど、なにぶんそういう知識はまるで無いのでどう勉強したらいいかさっぱりです
とりあえず初心者向けの参考書とc#を打てるなんちゃらスタジオがあれば大丈夫でしょうか
0685デフォルトの名無しさん (ワッチョイ cf81-pqc8)
2018/11/26(月) 11:21:34.31ID:SVaivieI0
>>684
自分に合った参考書やサイトを見て勉強しながら
VisualStudioで試行錯誤しながらやっていくしかない

自分の周りにC#について教えてくれる人がいるなら
どんどん聞いて吸収していくのが一番いい

とにかくサンプルコードを打ち込んだりしながら
想像力を働かせて覚えていくしかないよ
そのうち視界が開けて来て作りたいものが作れるようになる

作れるようになったらまず、簡単なものからにするべき
いきなり難しいものを作ろうとすると潰れるよ(天才なら別だが)
アラーム時計やカレンダーや画像ビューアあたりから始めるのがいいと思う
0687デフォルトの名無しさん (ワッチョイ e3b1-Kv/S)
2018/11/26(月) 15:45:06.75ID:qFYm+H7r0
コンソールアプリにてコンソール自身へのIME制御はハードル高いのでしょうか?
ひらがなモード、半角英数モードをコンソールアプリ側で切り替えたいと思い色々ググって試してみたところ、うんともすんとも行きません
大人しくFormアプリにするべきなのでしょうか
0688デフォルトの名無しさん (ワッチョイ 238a-J8rx)
2018/11/28(水) 03:51:20.87ID:W51sdDs/0
簡易HttpServerを作りたいのですが、以下のコードを実行してアクセスすると、"GET"が2回コンソール出力されます。
クライアントからのGETは1回しか受信していないと思うのですが、何故でしょうか。
https://ideone.com/Nr02QL
0693688 (ワッチョイ 238a-J8rx)
2018/11/28(水) 12:59:30.21ID:W51sdDs/0
>>690
おっしゃる通り、faviconリクエストでした。
本当にありがとうございます。
0695デフォルトの名無しさん (オイコラミネオ MM87-BYmB)
2018/11/28(水) 13:16:32.80ID:xrfZ5xLeM
>>692
劇的に効果あるなら
マルチタスクにしてもいいし、GPGPUとか、openCL(作り方によればCPUでもGPUでも動かせるし、併用でフル実行させるとやりきった感半端ない)とか今なら色々あるよ
0696デフォルトの名無しさん (ブーイモ MM27-iCMB)
2018/11/28(水) 13:26:20.94ID:cyvzVFzDM
>>692
まずはアルゴリズムの改良を検討する
スクリプト言語だとCPUバウンドな処理はC++に比べて数桁遅いから、
許容範囲の処理時間を達成するためにはスクリプトのままアルゴリズムの改良を頑張るよりもC++で力技の方が結果的に早い(速い、ではない)ことも多い
一方C#はせいぜいC++の数倍のオーダーであり、その程度ならアルゴリズムの改良によって簡単に逆転する
0698デフォルトの名無しさん (ワッチョイ 839f-nfAC)
2018/11/28(水) 16:41:31.36ID:JaydQRfC0
SecureStringは使うなって書いてあるんだけど
じゃあ代わりに何使えばいいの?教えて
0699デフォルトの名無しさん (スッップ Sd1f-1ob7)
2018/11/28(水) 17:06:53.33ID:BP3XEZ+Jd
HANDLE CreateFile(
LPCTSTR lpFileName, // ファイル名
DWORD dwDesiredAccess, // アクセスモード
DWORD dwShareMode, // 共有モード
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // セキュリティ記述子
DWORD dwCreationDisposition, // 作成方法
DWORD dwFlagsAndAttributes, // ファイル属性
HANDLE hTemplateFile // テンプレートファイルのハンドル
);


lpSecurityAttributes
取得したハンドルを子プロセスへ継承することを許可するかどうかを決定する。

個プロセスへの継承とはどういう意味なのでしょうか
0701デフォルトの名無しさん (ワッチョイ 7fc3-EZ1D)
2018/11/28(水) 18:19:28.62ID:urROSKq40
ここでWin32とかの話はスレチだわな。

セキュリティ記述子の話をすると、所有者セキュリティID, グループSID, 任意 アクセス制御リスト, システムアクセス制御リスト, アクセストークンの話で本が書ける。無難にNULLを入れとけばよい。

C#だとSystem.Intptr.Zeroだな
0703デフォルトの名無しさん (ワッチョイ ff9b-ZAsc)
2018/11/28(水) 19:36:37.13ID:whfYkWqO0
pictureboxの中に400☓800の四角を書き、線ボタン、丸ボタンを作って、それを投下したら四角の中に絵を書いくもの作りました。


@データ番号入力(001)3桁
A上記のpictureboxが表示
B線やら丸やら書く
Cデータ内容保存
この繰り替えし。

この時のCで書いた情報の保存方法はどうしたらいいと思いますか?座標点の他にどんな情報があったらいいですかね?
もう一回表示したい時とか
0705デフォルトの名無しさん (ワッチョイ 6f93-2v1H)
2018/11/28(水) 21:24:08.05ID:WfNZCJmP0
実行中は線引く際のストローク、円を描く際のパラメーターをリストで保存してくのが定番。アンドゥリドゥのために。
保存するときは、imageに変換しても良いし、描画履歴の情報を保存しても良い。
何がしたいかによるとしか
0706デフォルトの名無しさん (ワッチョイ f3c3-pqc8)
2018/11/28(水) 21:33:46.64ID:wlMFFO6p0
>>698
https://github.com/dotnet/platform-compat/blob/master/docs/DE0001.md
> The general approach of dealing with credentials is to avoid them and instead rely on other means to authenticate,
> such as certificates or Windows authentication.
資格情報を扱う一般的な方法は、資格情報を回避し、代わりに証明書やWindows認証などの他の認証方法に依存することです。

回答になってないな…。
0707デフォルトの名無しさん (ワッチョイ 234a-tprL)
2018/11/29(木) 11:59:38.79ID:w8w+eTQL0
自作のコントロールでFontプロパティを実装しようと考えています。

FontはIDisposableを継承しているので適切なタイミングでDisposeを実行する必要があると思うのですが
・コントロールのDispose内
・プロパティのsetter
この2箇所でDisposeの呼び出しを実装すれば大丈夫ですか?他にDispose呼び出しが必要な所は無いですか?

具体的には↓のように実装しようと思っています
https://ideone.com/rJl7Fj
0708デフォルトの名無しさん (アウアウエー Sa52-70Pl)
2018/11/29(木) 12:58:03.97ID:GYTobZd0a
>>707
別のオブジェクトが同じFontの参照を握ってる可能性もあるから
自分の都合で勝手にDisposeするわけにもいかんでしょう。

ほっておくしかないのでは。

どうしても気になるならFontプロパティのセッターでFontの参照そのものをバッキングフィールドに
キャッシュするのではなく、等価なFontを再構築可能な情報をキャッシュするようにするとか

本当はこういうプロパティーの実装はよくないみたいだけど(ゲッターの返す値が毎回別のオブジェクトになるから)
0709デフォルトの名無しさん (ワッチョイ 234a-tprL)
2018/11/29(木) 13:59:52.58ID:w8w+eTQL0
A : myControl.Font = new Font("MS UI Gothic", 9);
B : myControl.Font = mainForm.Font;

毎回上記のAのようにするならDisposeしても大丈夫だけどBみたいなことをすると
mainFormのフォントが勝手にDisposeされることになるからまずいから
自動プロパティとかにしてDisposeはGCに任せるか、内部的にはフォント名、サイズとかの
情報だけ持たせてgetterで毎回newする形にするしかないってことですかね?
0710デフォルトの名無しさん (ワッチョイ 1a9a-hssQ)
2018/11/29(木) 20:54:36.67ID:LaO1Tjsi0
>>707
Control継承するとFontプロパティもついてくると思うけど別に使うのかな?
>>709
蛇足気味だけど厳密にやりたいなら
set
{
Font ft = value as Font;
if (null != ft)
{
if (null != _myFont) _myFont.Dispose();
_myFont = new Font(ft.FontFamily, ft.Size, ft.Style, ft.Unit);
}
}
こんな感じかな。他はそのままで
set { _myFont = value; }でも大した問題起こらない気もする
もっとまじめに考察したいならILSPYでControlのFontプロパティがどうやっているか追っかけて確認してみるとか
0717デフォルトの名無しさん (ワッチョイ 5fa5-DrDc)
2018/11/30(金) 20:20:52.54ID:3yrtWl4o0
単にwavファイルを頭から再生するだけならSoundPlayerクラスでいいだろうけど
ループポイントいじったり波形まで触るような凝った再生するならWin32APIを使わないとダメだろうな
ってことが聞きたいんじゃね?
0718デフォルトの名無しさん (スププ Sdba-aHfj)
2018/11/30(金) 21:33:39.29ID:7tGVT0o8d
math.powでなくfor使ってa^b乗はどうやったらうまくいきます?
0721デフォルトの名無しさん (スププ Sdba-aHfj)
2018/11/30(金) 22:17:19.14ID:n5lF99wkd
天才あざす
0722 ◆QZaw55cn4c (ワッチョイ ba60-4R1R)
2018/11/30(金) 23:14:00.97ID:MkfLpznc0
>>717
wav ファイルの波形パターンを取り出してプログラムで適当に加工したあと win32api に渡すと音がなる、とかできるのでしょうか?API関数名はなんですか?
0726デフォルトの名無しさん (ワッチョイ 9ab3-lzSb)
2018/12/01(土) 15:10:50.09ID:BBiFvNwv0
For文でTaskの配列を使いたいんだけど

var task=new Task[10];
for(int i=0;i<10;++i)
{
int j=i; ←これ
task[i]=Task.Run(()=>{なんかjを使う処理;});
}

こんな風に変数の置き換えをしなきゃいけないのを処理する
なんか別のカッコいい方法ってありますか?
0730デフォルトの名無しさん (ブーイモ MMba-D04G)
2018/12/01(土) 17:03:32.28ID:q6i9ekrsM
>>728
残念ながら君より質問者のほうがC#をよく理解している
俺も727派だけど、別解としては for じゃなくて foreach (var i = Enumerable.Range( なら i をラムダ内でそのまま使っても問題ないよ(C#5以降)
0731デフォルトの名無しさん (ワッチョイ b39d-hzet)
2018/12/01(土) 17:04:04.70ID:QCT+flDQ0
static void Main()
{
Console.WriteLine("Begin");
var tasks = new []
{
Task.Factory.StartNew(() => Console.WriteLine("Task1 is running")),
Task.Factory.StartNew(() => Console.WriteLine("Task2 is running")),
Task.Factory.StartNew(() => Console.WriteLine("Task3 is running")),
};
int index = Task.WaitAny(tasks);
Console.WriteLine("Index = {0}", index);
Console.WriteLine("End");
}
}
New[]ってなに?
0733デフォルトの名無しさん (ワッチョイ b39d-hzet)
2018/12/01(土) 17:16:05.12ID:QCT+flDQ0
ああそいうことなの、ありがとう。推論しすぎだよ。W
0734デフォルトの名無しさん (ワッチョイ b39d-hzet)
2018/12/01(土) 17:21:20.93ID:QCT+flDQ0
tasks Newしてるのにスタートしてないのも推論?
0736デフォルトの名無しさん (ワッチョイ 0eeb-hzet)
2018/12/01(土) 18:50:52.76ID:4Hpcan/K0
便乗で低レベルな質問してすまんが、なんでこれの実行結果って10のみになるの?
なんか0〜9の10行になりそうな気がしちゃったんだけど・・・・どうして!?

using System;
using System.Threading;
using System.Threading.Tasks;

public class Test
{
public static void Main()
{
var task = new Task[10];
for(int i=0;i<10;i++)
{
task[i]=Task.Run(()=>Console.WriteLine(i));
}
}
}
0737デフォルトの名無しさん (ワッチョイ 0eeb-hzet)
2018/12/01(土) 18:58:25.70ID:4Hpcan/K0
たまたまメインスレッドで動いたやつだけConsole.WriteLineが動くとかそういうのなのかな?
0740デフォルトの名無しさん (ワッチョイ 0eeb-hzet)
2018/12/01(土) 21:00:00.35ID:4Hpcan/K0
ありがとう!なんで10になるのかはわかったよ
ただ次になぜ10が10個並んじゃわないのかが全然わかんなくなってきたぜ・・・・
0742デフォルトの名無しさん (ワッチョイ 0eeb-hzet)
2018/12/01(土) 22:13:11.50ID:4Hpcan/K0
>>741
forループ中にTaskが開始されるとなぜ1つになっちゃうのか全然わからなんだ・・・・
0743デフォルトの名無しさん (ワッチョイ 8a7e-o5Pc)
2018/12/01(土) 22:53:47.54ID:THW+jwSM0
メインスレッドが即座に終了して出力なしの方がザラだと思うが
明示的に待たないとTaskの完了など知った事ではないよ

というか徒に増やした所でメモリ帯域とかで躓くのがオチ
Taskは非同期だし、並列実行が望みならGPGPUなりを…
0745デフォルトの名無しさん (ワッチョイ 9ab3-lzSb)
2018/12/01(土) 23:13:24.31ID:BBiFvNwv0
>>727-730
ありがとうございました。いい方法あったんですね
そろい踏みで
var task = new Task[10];
for (int i = 0; i < 10; i++)
{ int j = i; task[i] = Task.Run(() => Console.WriteLine("a={0}", j)); }

var tasks = Enumerable.Range(0, 10).Select(i => Task.Run(() => {Console.WriteLine("b={0}",i);})).ToArray();

var task2 = new Task[10];
for (int i = 0; i < 10; i++)
{ task2[i] = Task.Run(() => Console.WriteLine("c={0}", i)); }

foreach (var i in Enumerable.Range(0, 10)) { Console.WriteLine("d={0}", i); }

Console.ReadKey();

で何回か試してみると、foreachだけは必ずタスクの起動順が順番通りで揃うんですね
ちょっとこれを使ってみます
0751デフォルトの名無しさん (ワッチョイ 9ab3-lzSb)
2018/12/01(土) 23:59:39.62ID:BBiFvNwv0
>>746-749
ああ、ほんとだ>>745で書いたの間違ってら。。。
何やってんだ俺。。。

var task3 = new Task[10];
foreach (var i in Enumerable.Range(0, 10))
{
task3[i] = Task.Run(() => Console.WriteLine("d={0}", i));
}

これであってんのかな
0755デフォルトの名無しさん (ワッチョイ 9ab3-lzSb)
2018/12/02(日) 09:05:24.28ID:VRa40hbi0
ラムダ式って
void method()
{
int x = 1;
int y = 10;
Action a = () => {Console.WriteLine( x + y); };
a.Invoke();
x += 100;
a.Invoke();
}
こうやってメソッド内に導入した瞬間にこのメソッドが
class クラス名が非表示のクラス
{
int x;
int y;
void a()
{
Console.WriteLine(this.x + this.y);
}
public void method()
{
this.x = 1;
this.y = 10;
a();
this.x+=100;
a();
}
}
みたいに勝手にクラス化されて変数が内部でフィールド扱いになるって理解でいい?
0760デフォルトの名無しさん (ワッチョイ 4b9f-GnKV)
2018/12/02(日) 15:05:44.53ID:1mt10vUo0
質問です
staticなclassに機密情報を保持してプロジェクト内のすべてのコードから参照して利用できるようにしたいです
その場合、改竄を防ぐために決められた場所(コード)からしかsetできないようにしたいですがどうすればいいでしょうか?
また他プロセスからのメモリ改竄はどのように対策をすればいいでしょうか?
0762デフォルトの名無しさん (ワッチョイ 4b9f-GnKV)
2018/12/02(日) 15:26:44.53ID:1mt10vUo0
>>761
書き込みじゃありません保持です
具体的には受け取った値をメモリ上に置いてそれを各所で参照します
0764デフォルトの名無しさん (ワッチョイ 4b9f-GnKV)
2018/12/02(日) 15:49:14.43ID:1mt10vUo0
>>763
情報ありがとうございます
さっそく調べてみます
0766デフォルトの名無しさん (ワッチョイ dbb8-C0zt)
2018/12/02(日) 15:55:38.27ID:yai2DppL0
メモリを直接書き換えてくるような攻撃だとアクセス修飾子なんて一切関係なく書き換えられるし、そもそもその後のif文自体を書き換えたりとかしてくるから一定レベル以上の攻撃は防げない
とりあえずxor暗号程度で保持しとくとかは?
get => 機密情報 ^ 0x01234567;
set => 機密情報 = value ^ 0x01234567;
0768デフォルトの名無しさん (ワッチョイ 4b9f-GnKV)
2018/12/02(日) 16:00:32.72ID:1mt10vUo0
>>765
>>766
>>767
ありがとうございます
参考にさせていただきます
0781デフォルトの名無しさん (ワッチョイ b39d-hzet)
2018/12/03(月) 14:27:17.52ID:1qcFF+t30
ClassA,ClassB,,,のインスタンスをJsonで保存したい。

Class Ihozon{
void init(){} //変数を初期化
string serialize(ClassA str){ }
ClassA deserialize( string json){ }
}
というインターフェースを作って保存処理は共通化したいと思うのだが、Serializeするのにクラス名の
引数が必要になるので共通化できない。こういう場合どうしたらいいの?
0782デフォルトの名無しさん (アウアウエー Sa52-70Pl)
2018/12/03(月) 15:09:15.55ID:kXdIrz5+a
>>781
ちょっと何言ってるのかよく分からないところがあるので
勘違いかもしれないけど、普通にジェネリックメソッドにするだけじゃないの?

public static string JsonSerialize<T>(T obj) {...}
public static T JsonDeserialize<T>(string json) {...}
0783デフォルトの名無しさん (ワッチョイ b39d-hzet)
2018/12/03(月) 15:51:51.32ID:1qcFF+t30
jeneric interface をつかったらいいんだね。できました。ありがとう。
0784デフォルトの名無しさん (ササクッテロレ Sp3b-QMby)
2018/12/03(月) 16:33:19.27ID:k9BWMLgHp
インスタンスを保存して何か良い事あるのか?
言葉の違いなだけならいいが…クラス内の値を保存するんだよな?
クラスのある位置を示すポインタを保存するんじゃないんだよな?
0786デフォルトの名無しさん (ワッチョイ b39d-hzet)
2018/12/03(月) 17:31:56.17ID:1qcFF+t30
public interface Ijson<T> {
T deserialize(string json);
string serialize(T js);
void init();
}
public class ClassA : Ijson<ClassA>
{ }
ClassAをシリアライズしたいのだけでど、Interfaseするんはわかったんだが内部に
つねに class ClassFile{ void FileSave() {} void FileLoad(){} } を継承もしたい。
(中が固定なのでいちいち実装したくない)
ClassA A = new ClassA();
A.FileLoad(); // これでAはファイルデータで初期化したい。
継承とinterfaceを同時にやるってどうやるの?
0787デフォルトの名無しさん (スプッッ Sd5a-VqKd)
2018/12/03(月) 17:49:03.84ID:PYYWjLDMd
System.Web.Mail.MailMessageクラスのFieldプロパティでCDOのFieldを追加してました。

System.Webは古いからSystem.Net.Mailを使えと警告が出るので置き換えようとしてみたところ、対応する方法が見つかりませんでした。
ご存知の方いないでしょうか。
0788デフォルトの名無しさん (ワッチョイ b39d-hzet)
2018/12/03(月) 18:01:20.51ID:1qcFF+t30
>>786
自己解決:Interfaseやめてジェネリックのクラス使えばできました。
0789デフォルトの名無しさん (ワッチョイ b39d-hzet)
2018/12/03(月) 21:15:19.45ID:1qcFF+t30
別のプロジェクトからCopy してきた Form1をNameSpace名をこのプロジェクトに
あわせて
var fm = new Form1();
fm.ShowDialg();
とやっても、空のフォームが立ち上がる。なぜなんだろう?
0792デフォルトの名無しさん (ワッチョイ b39d-hzet)
2018/12/04(火) 04:22:30.94ID:16QpsEK/0
>>790
ありがとう。解決しました。
InitializeCompornent();の呼び出しが消えていた。
なんでだろ。消した覚えはないんだけど。
0793デフォルトの名無しさん (ワッチョイ b39d-hzet)
2018/12/04(火) 04:55:27.00ID:16QpsEK/0
>>791
interfaceを使えないかトライしてみましたが、どうもうまく行かないです。
ClassFileはIjsonをインターフェースする必要があって、Ijsonのinit()はClassAのプロパティや
変数の初期化なのでClassAの中でしか実装できません。なので
ClassFile:Ijson<ClassA>
ClassA:ClassFile<ClassA>
のような構成になります。しかし問題があります。
問題:ClassFileの中ではinit()は実装したくないのに、実装を余儀なくされるが、初期化したい変数は
ClassAの中にあるので困る。
0794デフォルトの名無しさん (ワッチョイ b39d-hzet)
2018/12/04(火) 05:04:31.89ID:16QpsEK/0
clsAのインスタンスに代入する方法ってこれでいいのでしょうか?
public class clsA: clsJson <clsA>
{
public void ParamLoad() {
clsGamenParam v = this;
v = base.ParamLoad();
}
}

public class clsJson<T>{
public T ParamLoad(string IniName = "") {
T param = default (T);
param = deserialize(json);
return param;
}
}
0798デフォルトの名無しさん (ワッチョイ 5a9b-m+hN)
2018/12/04(火) 22:37:30.63ID:TaxB7EJj0
ピクチャーボックスに線を書くとか丸を書くとかした後にクリックで線を選択出来たりとかします?
エクセルで言うオートシェイプ見たいな感じで
0803デフォルトの名無しさん (スプッッ Sd5a-KXwy)
2018/12/05(水) 13:01:06.99ID:6cU8181gd
シングルトンパターン実装が面倒だからstatic実装をしてしまう私は雑魚なのでしょうか
いつインスタンスが作られるかぐらいの差しかないんじゃないのぉぉぉお起動時に一度だけ呼ぶ使われ方ならぁぁぁあ
0805デフォルトの名無しさん (ブーイモ MMba-D04G)
2018/12/05(水) 13:24:54.14ID:mkn+H/81M
>>803
グローバル変数を作る目的でシングルトンにするくらいなら、Globalクラスでも作ってそのstaticフィールドとして持たせて共有したほうがマシ
シングルトンが用いられる大抵のケースでは、アプリでクラスAのインスタンスが一つしか必要とされないという要件を、
誤ってクラスA側に持ち込んでしまい不必要な制限をクラスAに対して与えている
基本的にシングルトンはアンチパターンであり、使うべきではないと考えておけばいい
0812デフォルトの名無しさん (ワッチョイ abeb-3M3s)
2018/12/06(木) 17:22:48.54ID:PXx1OaoO0
そういやDIコンテナってどういう仕組みになってんのか全然わからん
コンストラクタの引数をインターフェイスにするだけで、登録済みのオブジェクトを自動的に注入してくれるわけだけど・・・・
あれってコンストラクタの呼び出し側は一体どんな仕組みになってるの?
そもそも引数のインターフェースを増やそうが減らそうがコンパイルエラーが起きないって、呼び出す側は一体どうなってるのかしら
0814デフォルトの名無しさん (ワッチョイ abeb-3M3s)
2018/12/06(木) 17:45:26.67ID:PXx1OaoO0
>>813
ありがとう
リフレクションは全然使ってなかったので勉強してくるよ
0815デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
2018/12/06(木) 23:07:45.72ID:LqRlvnk/0
リフレションとかバカしか使わないわ
0818デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
2018/12/06(木) 23:47:06.96ID:LqRlvnk/0
リフレクションはウンコみたいな依存関係を作る元凶だからな
まともなヤツならまず使わない
0821デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
2018/12/07(金) 00:12:46.91ID:0/x3pMw+0
こうやってクソみたいな依存関係のあるクソコードが量産されていくのがよくわかる
0822デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
2018/12/07(金) 00:14:25.89ID:0/x3pMw+0
AというオブジェクトからBというオブジェクトにアクセスする場合
よほどの理由がないかぎりBからAにアクセスすることは避けないといけない

できるだけコンポジションにするべき
この場合、AがBを内包するようにする

コレはシロウトでなければ常識の問題だからな
0824デフォルトの名無しさん (ワッチョイ d9e3-k/Y9)
2018/12/07(金) 00:27:55.79ID:OtTuCL9w0
>>822
> AというオブジェクトからBというオブジェクトにアクセスする場合
> よほどの理由がないかぎりBからAにアクセスすることは避けないといけない
何で?

例えば俺がAでお前がBだったとする
俺からお前を殴るかもしれんし
お前から俺を殴るかもしれん

どちらにしろ
お前はすでに死んでいる
0827デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
2018/12/07(金) 00:32:37.34ID:0/x3pMw+0
低学歴知恵遅れほど
継承とリフレクションをうれしがって多用するからな

まさに
オブジェクト指向に低学歴知恵遅れは
キチガイに刃物
0831デフォルトの名無しさん (ワッチョイ e18a-nOOm)
2018/12/07(金) 03:53:19.21ID:4tv6nv6l0
64bitの.NET Core でSQLite使いたい時はどれ落とせばいいんですか?
http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

.NET Core用のは以下の1つしかないっぽいけど、これ使うと、"間違ったフォーマットのプログラムを読み込もうとしました。"とエラーが発生します。
Precompiled Binaries for the .NET Standard 2.0 (.NET Core 2.0)

過去の.net frameworkの経験上、bit違いでこのエラーが出るようなんですが、Core用SQLite.dllが上記しかないので、どうしようもない状態です。
0833デフォルトの名無しさん (ワッチョイ 89f7-e/g/)
2018/12/07(金) 08:35:25.92ID:TvdhMF8B0
気ままにREFLECTION
0837デフォルトの名無しさん (ワッチョイ 9306-n9Ol)
2018/12/07(金) 09:28:53.50ID:0Ncculaf0
>>831
UWPでは、System.Data.Sqliteとは別系統のMicrosoft.Data.SQliteというMSご謹製のライブラリがあるのでそっちを使ってください
ちなみにDapperはマトモ動きませんのでEF Core使うか直にADOやらないと駄目だけどね
0840デフォルトの名無しさん (ワッチョイ 2b80-7TzT)
2018/12/07(金) 11:35:57.70ID:cSzYN2du0
漏れは、様々なアプリから使うために、C:\sqlite3 に、すべてを入れているけど。
ただし、C# は使わないけど

sqlite3.def, sqlite3.dll, sqlite3.exe

sqldiff.exe, sqlite3_analyzer.exe
0843デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
2018/12/07(金) 21:14:47.96ID:0/x3pMw+0
やっぱりバカはいまだにうるう秒がどういうもんなのかすら分かってない
低学歴っていちいち低学歴を自白するからな

そして低学歴の知ったかドイチェ語
すぐに分かるのが恐ろしいわ。。。
0844デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
2018/12/07(金) 21:21:23.93ID:0/x3pMw+0
>>843
コレは誤爆だ

リフレクションで問題になるのは
オブジェクトの依存関係になるのは常識だからな
0847デフォルトの名無しさん (ワッチョイ 5b93-Hr0L)
2018/12/08(土) 01:40:50.37ID:bqexRm9V0
暫く泳がせてたが
オブジェクトの依存関係はリフレクションとは直接関係ないけどな

メタデータ触るには不可欠だし
ライブラリ周り作るにも必要なケースは多い

自称上級者が継承やらリフレクションや使ってドヤって害悪なのは同意
0849デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
2018/12/08(土) 15:59:48.92ID:f0K+9NgH0
ぜんぜん違う

このスレにいるような池沼が作らなければ
クラスライブラリも階層(ココで階層は継承の階層ではない)や種類で作るからな

低い階層に行けばいくほど単純な簡単な機能を提供するクラスになる
階層は完全に分離させて独立したライブラリにする

そして明確に種類の異なるプリミティブがある場合は
ライブラリを完全に分離させて独立したライブラリにする

その上にアプリケーションを実現するクラス群がのっかる

低学歴知恵遅れが作るとすべて同じ階層で同じ種類になる
0850デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
2018/12/08(土) 16:01:14.77ID:f0K+9NgH0
当然、低レベルな部分を実現するクラスライブラリと
アプリケーションが主に利用する中間層のクラスライブラリと
アプリケーション自体を記述するクラス群は
シロウトでもないかぎり完全に分離するからな

低レベルな部分を実現するクラスライブラリは
当然、中間層のクラスライブラリやアプリケーション自体を記述するクラス群を
参照することはまずない

アプリケーションが主に利用する中間層のクラスライブラリは
アプリケーション自体を記述するクラス群を参照することはまずない

低学歴知恵遅れが作ると酷い依存関係ができる
コレはオブジェクト指向関係なくライブラリの基本だからな
0851デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
2018/12/08(土) 16:04:06.83ID:f0K+9NgH0
組織でたとえるならこうなるからな

 経営者クラス 社員をこき使う
  ↓
 社員クラス ← 派遣をこき使う(職階ごとの複数の中間層)
  ↓
 派遣クラス ← キミラが担当するような低レベルな部分の単純作業(つまりキミラ)

派遣は社員の作業も役員の作業もしない
社員は役員の作業はしない

関数の行数が多いのは
作業を整理して作業を手順化して
派遣にうまく単純作業を割り当てれてないのと同じだからな
つまり、人に仕事させないと自分の作業が増える

キミラは派遣ドカタだからな、そういう作業はできないのは分かる

当然作業ミス(例外)が発生してスルーし続けてたら上までいく
0853デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
2018/12/08(土) 16:05:53.18ID:f0K+9NgH0
例えば扱うビジネスの領域が違えば
部門を分けることになる

会社に複数の部門があっても一つの会社だからな
種類で分けるというのはそういうことになる

キミラみたいな一種類の単純作業しかしてないヤツラには関係ないワケ
0854デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
2018/12/08(土) 16:06:15.85ID:f0K+9NgH0
というわけでな
キミラは刺身にタンポポのせる作業に戻りなさい
キミラにはムリ
0855デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
2018/12/08(土) 16:10:10.36ID:f0K+9NgH0
いちいちタンポポ載せてる作業経過報告はいらない
作業の補助とか、いちいち次になにをするかとかとか指示はしないからな

タンポポが地面に落ちたとかこのタンポポのハナ小さいとか
そういう報告(リフレクション)もいらない
捨てときなさい
それぐらい分かるだろう

タンポポが足りなくなりそうになったら
この台帳に書いときなさい
コレだけはたまに見といてやるからな

キミラのコーディングは自身がおかれてる立場と
まったく一致してるワケ
0857デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
2018/12/08(土) 16:26:20.22ID:f0K+9NgH0
所詮、派遣ドカタ
残念なことに派遣ドカタのレスなんか
すぐにわかるわ
0858デフォルトの名無しさん (ワッチョイ 899e-ZtDu)
2018/12/08(土) 16:28:18.82ID:f0K+9NgH0
バカに限って抽象化とかいって
サルみたいにうれしがって継承するからな

破綻はそこから始まる

しばらくほっとくと
データ受け渡しするために
無秩序に相互参照しはじめる

こうなったら終わりの始まり
0859デフォルトの名無しさん (ワッチョイ 93a5-T+E4)
2018/12/08(土) 16:41:33.73ID:MYwA5eIj0
質問です
ifの条件に配列を使いたいとき、例えば
if( 配列[ ]=={1,2,3,4} )
みたいにやるにはどうするのが一番簡単ですかね
配列[0]==1&&……で一個ずつ作るしかないですか
0865デフォルトの名無しさん (ワッチョイ e19a-pji+)
2018/12/08(土) 18:42:24.05ID:bRz/x0PH0
半角カナの人はあっちこっちで喧嘩売っている話の通じない人だから相手にしないでくれ
あとここ質問スレだから質問以外の話は相談室なり他で頼むよ
0867デフォルトの名無しさん (ワッチョイ 2b80-ZtDu)
2018/12/08(土) 21:20:12.98ID:tBodI9MC0
オレはケンカなんか売ってない
バカが真人間になるように矯正してるだけだからな

バカはオレにケンカ売ってるつもりらしいな
0868デフォルトの名無しさん (ワッチョイ 2b9a-e5Zh)
2018/12/08(土) 21:48:06.02ID:3kcswmur0
>>859
「一番簡単」が何を求めているのかわからないが、比較するものの数が決まっているのなら「配列[0]==1&&……で一個ずつ作る」のが「速くなる」
汎用にしたいのならラムダもlinqも俺自身が使えないのでメソッドにすると例えば
private bool hikaku(int[] arr1, int[] arr2)
{
if (arr1.Length != arr2.Length) return false;//配列の長さのCheck
int i = 0;
for (; i < arr1.Length; i++) if (arr1[i] != arr2[i]) break;
return i == arr1.Length;//全部一致したら最後まで止まらない
}
メソッドを呼び出すのはそれだけで速度的にだいたいロスになるので「速い」動作を求めるのならこれも勧めない
linq使うのが一般的だと思うけどそれは他の人に聞いてw
0870デフォルトの名無しさん (アウアウエー Sa23-M/db)
2018/12/08(土) 22:32:50.81ID:uQ6Iu0Wba
まあ、>>861で済んでるとは思うんだけど、あえて付け加えるならこう?
public static bool Equals<T>(this T[] x, params T[] y) where T:IEquatable<T>
{
  return x.SequenceEqual(y);
}

今は(というか10年前からだけど)new[]{...}が使えるからparamsは有難みが薄いかもしれない
0871デフォルトの名無しさん (ワッチョイ 139b-rUSZ)
2018/12/09(日) 01:48:43.58ID:XoVxwZDP0
vbで言う、戻り値もらう時Function 〇〇の〇〇の部分って変数はそのまま使えない?
あとcallはないみたいだけど、人が書いたコード読む際にこれはなんか値取ってきてるなとか何か計算しにいってるなとか一目で分かるには慣れるしかないですかね?
0872デフォルトの名無しさん (ワッチョイ 01d2-WxAZ)
2018/12/09(日) 02:03:01.52ID:bhezjmzk0
〇〇 = 戻り値 は return 戻り値; じゃね。

Call は戻り値とかではなくて戻り値のない関数(Sub)を呼ぶときに引数の部分を () でくくりたい場合に使うものではなかったっけか。
戻り値を受け取るかは呼ぶ側で 変数 = 呼ぶ関数(); になってれば受け取るんだろうし、
呼ばれる側が戻り値を用意してるかどうかは呼ばれる側の関数の(戻り値の)定義が void になってれば返さないんだろうしってことじゃダメなん?
0878デフォルトの名無しさん (アウアウエー Sa23-M/db)
2018/12/09(日) 12:17:17.42ID:qjppHIrra
VBでもCallなんて付けない方がいいと思うしそれが普通だと思うけど、
>>876の内容はCallキーワードの使用一般を非推奨とはしてないじゃんw

これが非推奨と言ってるのはたぶん、
Call Math.Min(1, 2)
みたいな使い方。これはCallはC系の言語でいう式になってない、つまり
Dim x = Call Math.Min(1, 2)
と書けないことも一因か?

あと、>>871
>vbで言う、戻り値もらう時Function 〇〇の〇〇の部分って変数はそのまま使えない?

これはどういう意味なの?
まったく分からん
0883デフォルトの名無しさん (ブーイモ MMb3-PCBP)
2018/12/09(日) 13:02:30.07ID:G5eD25r9M
>>878
いや呼び出しが識別子で始まらない場合って書いてあるでしょ
サンプルコードにあるように、New Hoge.Method() とか、ラムダ式を即時呼び出しするケース
これは純粋に構文解析上の制限だろう
0884デフォルトの名無しさん (アウアウエー Sa23-PCBP)
2018/12/09(日) 13:13:46.66ID:QJ+QHutHa
BASIC系ではステートメントは原則的にステートメント種別を示すキーワードで始まらなければならず、式が単独でステートメントになることはできない
これは構文解析を楽にするための制限で、大昔の言語ではわりと一般的なスタイルだ
ただ、さすがにそれは不便だということで、識別子から始まる式については例外的に単独でステートメントになることができる
>>876のサンプルコードにあるようなケースでは四季がステートメントと見做されないから、例外的にCallが必須になるということだね
0885デフォルトの名無しさん (アウアウエー Sa23-M/db)
2018/12/09(日) 13:16:52.52ID:qjppHIrra
>>883
ああ、なるほどそうだねごめんw
MSDNの記事読んでなかったよw

VBは
(New TheClass()).ShowText()
と書けないのか。ダメな理屈がよくわからんなあ

ラムダ式の即時呼び出しは便利そうだね。
必要になった記憶はないし、戻り値を握りつぶすんじゃ相談室の方の661の
質問みたいなことはできないが
0886デフォルトの名無しさん (ワッチョイ 89a5-aoeu)
2018/12/09(日) 13:48:52.09ID:TF/l/AmT0
文法の違いにケチつけても意味無いだろ
外国語覚えるつもりで勉強しろよ
0889デフォルトの名無しさん (ワッチョイ 5b93-Hr0L)
2018/12/09(日) 14:54:32.29ID:3jtGHyYw0
>>878
vbではfncHogeの戻り値を設定するのに
return 1
fncHoge = 1
のどちらの書き方もできたねん
関数の中で、関数名を変数名として使えた

再帰処理なんか考えたら
パっと見紛らわしくて
可読性に問題あるけどね
0891デフォルトの名無しさん (ワッチョイ 4b33-e/g/)
2018/12/09(日) 17:30:37.98ID:iieryEV90
ちょっとすれ違いだけどVB出てきたのでちょっと質問
C#でMicrosoft VisualBasicを参照にしてInteraction.InputBoxを使って「キャンセル」が押された場合は
VBで言うEmptyが返るはずなんだけど(VBのfunctionで何も値を設定せずexit functionした場合はEmptyが返る)、
EmptyかどうかをC#で判定する方法ってありますか?
0892デフォルトの名無しさん (ワッチョイ 4b33-e/g/)
2018/12/09(日) 17:38:47.00ID:iieryEV90
VBScriptなんかだと
r = Inputbox("何か値を入れてね")
if IsEmpty(r) then MsgBox "キャンセル押したね?"
という風に空文字列と区別とできるのでそれをやりたいの
0893デフォルトの名無しさん (ワッチョイ abeb-3M3s)
2018/12/09(日) 17:42:09.39ID:vv5ogZC30
初心者用スレッドは学習者のためにあるべきだろう
進歩のないVBコピペプログラマーのためにコードを代わりに書いてあげる場所にはならないようにしようぜ
0896デフォルトの名無しさん (アウアウエー Sa23-M/db)
2018/12/09(日) 18:58:05.28ID:MwzmlrtWa
>>892
たぶん分かってると思うけど、ドキュメント見る限り無理だね
そもそも今時モーダルなダイアログを表示してテキスト入力させるUIってどうなのよって気がする
単純なメッセージボックスでもイラッとくるよね
0897デフォルトの名無しさん (ワッチョイ 01d2-WxAZ)
2018/12/09(日) 19:01:49.57ID:bhezjmzk0
>>891
その Empty の型はなに?
たぶん string なんだろうけど、それなら IsNullOrEmpty() あたりかね。
895 の言うような問題もあるけれど、もとから Empty かどうかだけで判定してたなら上ので用が済むんじゃね。
0902デフォルトの名無しさん (アウアウエー Sa23-M/db)
2018/12/09(日) 20:35:01.06ID:DSJaW4t2a
別に本当に必要ならモーダルでいいよ。

どうせ分かって言ってると思うけど、モーダルなダイアログはユーザーの自由を奪って
特定の操作の完了を強制するUIだから、可能なら避けるべきなのは当たり前だし、
昔から嫌われ者だよね

そして、どうしてもモーダルなダイアログでテキストの入力を強制する必要があるケースなんか
あんまりないと思う。他にいくらでも代替手段があるでしょ
0908デフォルトの名無しさん (ワッチョイ e18a-nOOm)
2018/12/09(日) 22:21:24.37ID:+4l8dAVu0
うちの場合、モーダルではなく、入力されて問題ない時だけ入力出来るようにしてるわ。
ボタンも、押すと問題があるor意味がない時は無効化。
オペレーターの入れ替わり多い業界相手に売ってるから迷わせたらサポートが死ぬ。
0910デフォルトの名無しさん (アウアウエー Sa23-M/db)
2018/12/09(日) 22:34:38.83ID:DSJaW4t2a
IEではお気に入りに追加はモーダルなダイアログだったけど、
EdgeではChromeやFireFoxを真似てモードレスになってるよね。

まあ、さすがにモーダルの方が好みとか、作る方の都合を言ってるんじゃなきゃ
ネタで言ってるんだと思うが...
0912デフォルトの名無しさん (ワッチョイ 93d2-dPO+)
2018/12/10(月) 07:30:25.23ID:ouPt/Ido0
まさかクソセンスのないおまえらがUIを語るとは思わんかったw
大体ユーザーが喜ぶんわおまえらが良いと思う逆やからね
これ覚えとった方がええでw
0916デフォルトの名無しさん (ワッチョイ d906-n9Ol)
2018/12/10(月) 22:56:37.46ID:e05pNJ/D0
モーダルダイアログの欠点は、マルチウインド故に偶に起こる事故でモーダルなのにウインドウがメインの裏に回っちまって操作不能になる
それが改良されたUWPのContentDialogは良いね
何しろメインウインドウ上に描画されているだけだから上記の事故が発生しない

wpfのmaterial design xaml toolkitでも似たようなことが出来るな
0920デフォルトの名無しさん (アウアウエー Sa23-M/db)
2018/12/11(火) 17:14:17.41ID:znnejAaHa
>>919
そもそも>>916が言ってるような挙動は本当であればバグ。
内部の実装としては、親を指定しないバージョンが呼ばれた場合は
恐らくアクティブウィンドウを親にしてるはずで、そうであれば解決策にはならんだろうね

もっとも、こんな挙動は確かにWin9x時代は何度か体験した記憶があるけど、
Win2k以降は個人的には記憶がないなあ
0923デフォルトの名無しさん (ワッチョイ 4156-xqdQ)
2018/12/12(水) 15:25:10.30ID:gpIihp8I0
たまに暴走状態になって強制終了するしかなくなるのですが、
単純なエラーではなく暴走なのでどこのプログラムミスで暴走しているのかわかりません。
対処方法ってありますか?
0927デフォルトの名無しさん (ワッチョイ 4b23-VgPf)
2018/12/12(水) 15:49:07.30ID:Gas9nc7W0
単にメインスレッドで重い処理やってるだけのような気もしないでもないけども
とりあえずCPUに余裕があるならVS起動してプロセスにアタッチして全て中断してみる
0928デフォルトの名無しさん (アウアウエー Sa23-M/db)
2018/12/12(水) 18:46:12.29ID:9xK1qYaAa
盗んだバイクで

>>926
デバッグ実行してその問題が起こった時に、にIDEのツールバーの一時停止のピクトグラムのボタン
(ツールチップの表示は「すべて中断」)を押せばビジーループになってる箇所が分かるんじゃない?
0929デフォルトの名無しさん (ワッチョイ 2b9a-e5Zh)
2018/12/12(水) 20:23:04.54ID:kvTCOjS80
>>926
VS2017ならデバッグのパフォーマンスプロファイラーで監視したらデバッグ停止した後にCPU負荷の一覧をメソッドごと(関数名)に作ってくれるよ
だいたいどこかのループで嵌っているんだろうから自分で書いているのなら当たりつけてブレークポイント入れていけばわかると思うけど
0930デフォルトの名無しさん (ワイーワ2 FF42-yWnt)
2018/12/13(木) 12:15:25.84ID:zFPTCGevF
coroutine化汁
0931デフォルトの名無しさん (ワッチョイ 1e81-ejmu)
2018/12/13(木) 23:49:25.37ID:usWLAkyh0
見た目とコードを分離するために、WPFとかではMVVM pattern使えとか
書かれていることあるけど、企業向けの業務アプリでは
コードビハインドにはほとんど書かずにMVVMでかく割合はどれくらいなの?

コードビハインドほとんど使わなかったらコードが冗長になって
マイナス面のが多そうに感じる。
0934デフォルトの名無しさん (ワッチョイ 1e81-ejmu)
2018/12/14(金) 03:27:54.19ID:GJ/DAGX40
>>932-933
クロスプラットフォーム対応のためにWeb appというのはかなり前
からあるのは知ってるけど、ほとんどというほどASP.netになってるの?
あとASPはclassic ASP.netではなくASP.net MVC?

Web appのデメリットとしては
ブラウザだとUIがしょぼくて操作性が落ちる
見た目も悪い
UIまわりの開発の時間とコストが増える
ブラウザバージョンアップで動かなくなる
パフォーマンスも落ちる
とかデメリットが多すぎるし全部ブラウザだけでなんとかするのは少数派だと思ってた。
0935デフォルトの名無しさん (ワッチョイ 1e81-ejmu)
2018/12/14(金) 03:43:58.72ID:GJ/DAGX40
>>932-933
web appとの比較は別にして、WinFormsとWPFの選択肢で
新規でWinFormsを選ぶ意味ってまったくないんじゃないの

ただWPFわかる人がいなくてWinFormsでやっちゃったというかんじかな
WinFormsはWPFに比べて表現力が劣るからUIまわりで後から細かい注文
ついたときに困ったことになるんじゃない

UWPが微妙だから、desktop appはWPFの一択になってると思ってたわ
今ならWPFよりもXamarin使ってクロスプラットフォームとリッチアプリの
いいところどりがいいのかな
コカ・コーラとかSMBCがXamarin使ってるらしいけどMonoバグだらけ時代を
知っているとXamarin使うのも怖い
0939デフォルトの名無しさん (アウアウエー Sa82-MGZ2)
2018/12/14(金) 07:48:40.74ID:lOfJT1COa
仕事したことないんだろうけど、業務アプリでは特にどうしても止むを得ない理由がない限りはWebアプリを選ぶんだよ
イケイケのWebベンチャーでなくても、毎日のようにリリースされるシステムって普通にあるんやで
0940デフォルトの名無しさん (スププ Sdaa-sY6B)
2018/12/14(金) 08:08:29.06ID:tIMQiboGd
俺が前にいた会社はWPFバリバリ使ってたよ。 
Blendも使ってた。
デザインセンターとやりとりするのにBlend確かに便利だったし。
WinFormsはほとんど使ってなかったな。
0941デフォルトの名無しさん (ワッチョイ 1e81-ejmu)
2018/12/14(金) 08:15:12.24ID:GJ/DAGX40
>>936-937
あおるつもりじゃなくて真剣に思うけど
開発やってる会社がWPFすら知らないってのは会社としてレベルが低すぎじゃないか
WPFでたのが2006年
12年経ってもWPFわかる人いないくて新規でWinFormsで開発ってかなりやばい
C#ならクライアントの要望に応じてWPF, UWP, Xamarinと提案できるのが
まともな会社だろう。

MVCへの反応なかったところみても、ASPも古臭いclassic ASP使ってるんだろうな
ORMも使わずSQLゴリゴリ書いてそう

>>938
PCの初心者ほどわかりやすく使いやすいUIが必要
Webアプリって最低レベルのUX, UIだ
0942デフォルトの名無しさん (ワッチョイ 1e81-ejmu)
2018/12/14(金) 08:27:22.66ID:GJ/DAGX40
Web appが使いづらいからこそ多くの企業がsmartphone appをリリースしている
一般の個人ユーザーでさえWeb appを嫌っているという証拠だ
業務で長時間使うアプリがブラウザベースっていうのは普通にゴミでしょ

>>939
本当はユーザーに選ばせたのではなく、classic ASPしかできないから
ほかも提案せずにclassic ASPで開発したんだろう。

ユーザーはやむを得ない理由がない限りブラウザみたいな使いづらいのを選ばない。
Xamarinとか使えばクロスプラットフォーム対応もできるわけで
Web appを使わなければならないケースもほぼないだろう。
不特定多数に使わせるシステムならブラウザでも仕方ないが社内利用だからな
0943デフォルトの名無しさん (スププ Sdaa-sY6B)
2018/12/14(金) 08:35:34.97ID:tIMQiboGd
今の業務系ってWebの方が多くない?
長時間使うものでも。
セットアップが必要だと割と嫌われる気がする。
環境変えるのは割と稟議要るし。
うちどうしてもクラサバにするアプリは未だにClickOnce使ってる。
0944デフォルトの名無しさん (スップ Sd4a-5HC6)
2018/12/14(金) 08:39:24.37ID:Tj2eBqcgd
業務系っつってもいろいろあるしな
インストールとかのこと考えたらwebで済むならwebでやったほうが導入コスト抑えられることもあるし
案件次第かと
0945デフォルトの名無しさん (スププ Sdaa-sY6B)
2018/12/14(金) 08:40:29.88ID:tIMQiboGd
考えるに、Web系にしたいのは、タブレット対応を出来るだけ楽にやりたいって方が大きいんじゃないかな。
iPadアプリなんかは大量に作るわけにもいかんし。エンタープライズでも個数は決まってるから。

ASPならある程度は楽だよ。
UI部分はJSフレームワークと内製コントロール使ってるけど、今までのフォームベタ書きより遥かに楽。
そういえば今Office365だってReactだね。
0947デフォルトの名無しさん (ブーイモ MM6f-MGZ2)
2018/12/14(金) 08:55:57.55ID:uOUb+NbhM
使いづらいとか関係ないんだよ
工場が使いづらいからって従業員がその工場を使わないなんてあり得ないだろ?
ID:GJ/DAGX40が想像してるのはその工場の中で使われる工作機械(Excelみたいなツール的なアプリ)の開発だろうけど、
実際のシステム開発では工場を作る仕事の方がずっと多いの
0948デフォルトの名無しさん (ブーイモ MM6f-MGZ2)
2018/12/14(金) 09:08:26.15ID:uOUb+NbhM
学生だと思うけど、仕事でバリバリ使える新しい技術を習得したいならUI技術なんかどうでもいいからAWSを学ぶことを強くお勧めする
伸び続ける需要に対してまともなクラウド技術者(AWSから単なるホスティングサービス以上の価値を引き出せる人)はSI業界では全然足りてなくて、
一通りのプログラミングスキルを備えた上で手を出すなら技術スキルとしては最強よ
0949デフォルトの名無しさん (ワッチョイ 1e81-ejmu)
2018/12/14(金) 09:54:48.70ID:GJ/DAGX40
業務系で漠然としすぎてるなら、基幹業務アプリと仮定する

>>943-944
Deploymentが心配ならgroup policyで一括でいれちゃえばいいでしょ
ClickOnceよりさらに楽になる

>>944
Deployはすぐ終わるけど、
ブラウザベースにすると社員の生産性が落ちてずっと損失が続くよ
0950デフォルトの名無しさん (ワッチョイ 1e81-ejmu)
2018/12/14(金) 10:07:13.08ID:GJ/DAGX40
>>947
使いづらいとか関係ないと言っちゃう人は開発者に向いてないんじゃないの
自分はフリーウェア作る時でもどうやったら他人が使いやすくなるかじっくり考えるよ

Excel?工場?
社会人だしASP.net MVCでサイト開発もやってるしDB側も自分でスキーマから作ってる。
受託開発のような立場ではない開発者
0951デフォルトの名無しさん (ワッチョイ ebb3-rSJK)
2018/12/14(金) 11:20:55.70ID:T5iMn8UB0
まあ普通はWinformsでできることにWPF使わないよね
情報もミドルウェアも豊富だし完全に枯れてるし開発者も簡単に見つかるし
グラボのドライバのトラブルをモロに受けたりしないし

Winformsでは実装が大変なリッチなUIを実現したい場合に初めて検討するんでええと思うわ
0955デフォルトの名無しさん (アウアウエー Sa82-KEhP)
2018/12/14(金) 11:42:15.94ID:pFvZXuP0a
C#とたぶん関係ないけど、病院の待合室とか、科学館みたいなところで
いろんな情報をアニメーション付きで表示するサイーネージって今は何を使って開発してるの?
ああいうの大半はWindows PCだと思うけど

まさかFlashじゃないよね
0957デフォルトの名無しさん (ワッチョイ 1ae9-5HC6)
2018/12/14(金) 12:05:29.63ID:dJlHzP7u0
なんでwebアプリだったら生産性が落ちるんだw
そんなんケースバイケースじゃん
広い世の中いろんな案件、全部一緒くたにしてよく語れるなw
0961デフォルトの名無しさん (ササクッテロル Spa3-YXIk)
2018/12/14(金) 14:06:57.13ID:EGTqJp4wp
Winform推してる人ってマジなのか?
デスクトップアプリ作るならWPFかUWPのどっちかだろう
いまだにWindows7の会社もあるんだからWPFしか使えないところもある

Winformの利点はvbでポトペタで誰でも出来るから作る人すぐ見つかるぐらいだと思うが
0963デフォルトの名無しさん (スププ Sdaa-sY6B)
2018/12/14(金) 14:49:36.05ID:tIMQiboGd
>>949
だいたいそういうものは特定の部署の人だけが使うものだから、そんなに細かくグループポリシー切ってないし、
グループポリシー変えるってのはそれこそ環境変えることだから、超慎重論者が出てくるよ。
0975デフォルトの名無しさん (ワッチョイ 1e81-ejmu)
2018/12/14(金) 23:01:36.40ID:GJ/DAGX40
WPFはサードパーティーのコントロールとかかわなくてもきれいなUIつくれる。
UIだけでなくDatabindingもWPFのが出来がいい

否定してる人は勉強してなくてWPFほとんど使ったことない人だろうな
0976デフォルトの名無しさん (ワッチョイ 1e81-ejmu)
2018/12/14(金) 23:08:33.13ID:GJ/DAGX40
>>963
中堅以上の企業ならdesktop PCの管理ツールいれてるでしょ
グループポリシーじゃなくても管理ツールで一括でdeployはできる

web appの場合はブラウザのバージョンをそろえる必要があるし
web appのが楽とも言い切れない
0977デフォルトの名無しさん (スププ Sdaa-sY6B)
2018/12/14(金) 23:36:18.74ID:2263YZDvd
>>967
ちゃんと買ってるのもあれば、そうでないものあるって感じかな。
一応ルート証明書としてポリシーで撒いてるものはあるけど、必ずしも全てのプロジェクトでそれが使える訳ではない。
0978デフォルトの名無しさん (スププ Sdaa-sY6B)
2018/12/14(金) 23:41:16.45ID:2263YZDvd
>>976
インストールって行為がいかんのだと。
こちらが入れるあちらが入れるの問題ではない。
あんまり資産管理アプリの存在を気取られる訳にもいかんしな。

ブラウザのバージョンはもっと話が単純で、完全固定だよ。IEだけど。
Windows Updateも検証してから撒いてる。
0979デフォルトの名無しさん (アウアウエー Sa82-KEhP)
2018/12/15(土) 00:14:27.07ID:eiocXHQpa
>>975
そんなことないよw
もうだいぶ忘れちゃったけど、Win8が出た時にストアアプリと一緒にWPFも勉強した。

その上でやっぱりWPFは問題あると思う。
WPFの利点は認めるし、XAMLを導入した問題意識もよく分かる。

Windows Formって基本的に30年前のUIだから表現力に問題があるのはしょうがないとしても、
実用的なUI作るとFormのコードが肥大化してメンテしづらくなる。

だからバインディングその他を使ってイベントハンドラを追放しよう、って発想はよくわかるけど、
これでコードが減って可読性が上がってメンテしやすくなったかと言うと...個人的には大疑問。

むしろFormより悪くなっちゃってるとしか思えない。
WPFが普及しなかったのか結局そこだと思う。

前も書いたけど、WPFは作ってる時はいいけど、後で見た時に必ずしも可読的じゃない。
0980デフォルトの名無しさん (アウアウエー Sa82-MGZ2)
2018/12/15(土) 01:51:33.86ID:mgmsvi+Ca
全くもって違うよそれは
WPFではUIの自由度が上がることで制御すべき状態の数が激増するから、
それが極力開発者の負担にならないようにするためにバインディングが強化されたんだよ。
WPFの本来の思想でいえば、普通にコードビハインド書きまくって従来のコンポーネント指向で作るのが正しい使い方。
0981デフォルトの名無しさん (ワッチョイ 868a-UKyl)
2018/12/15(土) 02:39:09.34ID:LeOuIFUL0
WPF一択

UIを大幅リニューアルするとき、xamlだけの修正でVMは弄らずにすんだから
きちんと分離しといてよかったなと思う。

あと最近増えてきた高解像度ディスプレイで文字を拡大表示するPC(Surfaceとか)で、
プログラム側の対応無しに自動的にサイズ調整してくれるのも助かってる。

WinFormで高DPI対応とか地味なうえにめんどくさくてやる気出んわ
0986デフォルトの名無しさん (ワッチョイ 0ae3-7LdQ)
2018/12/15(土) 10:07:39.43ID:88lSHx3P0
バインドつながらないときにどこが腐ってるのか調べる方法が蝨潰しだからクソ
やること決まってるんだからあるべき接続図をビジュアル化して出せ

さらにつながらない原因ってこっちのコントロールではこのやり方でできたけど
こっちのコントロールでは無理なんすよっていう開発者の程度の低いボケ
そら誰も使わん
0988デフォルトの名無しさん (ワッチョイ 139f-5Jpq)
2018/12/15(土) 10:28:26.19ID:wll8PTaL0
>>986見てるとWPF嫌いなヤツは無能なんだなって思う
できるやつはWPFの恩恵受けられるから良く思えて無能はその逆ってことだな
0994デフォルトの名無しさん (ワッチョイ 13bb-gnc1)
2018/12/15(土) 13:02:39.07ID:ciWGnj730
たりないあたまでがんばったのはすごい
ようちえんからやりなおして、たりないぶぶんをてにいれてきてね
ばいばい
0998デフォルトの名無しさん (ワッチョイ 1e81-ejmu)
2018/12/15(土) 14:04:42.98ID:Wu4Fx0bU0
>>979
イベントハンドラは便利だし普通にWPFでつかってる。
メソッド長くなり過ぎないようにしてれば、後でそこまで困ったことには
ならないと思っている。
データはEntity Framworkでやってコード短くしている
10011001
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 71日 19時間 9分 0秒
10021002
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況