ふらっと C#,C♯,C#(初心者用) Part143

■ このスレッドは過去ログ倉庫に格納されています
2019/05/16(木) 19:28:06.27ID:s+6oZKe00
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

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

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

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
-
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2019/05/16(木) 19:28:59.30ID:s+6oZKe00
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
2019/05/16(木) 19:29:16.32ID:s+6oZKe00
C# のガイド
https://docs.microsoft.com/ja-jp/dotnet/csharp/index

Microsoft Docs
https://docs.microsoft.com/en-us/

.NET Documentation
https://docs.microsoft.com/en-us/dotnet/
https://referencesource.microsoft.com/
2019/05/16(木) 21:27:50.86ID:ZoVvvxluM
DataTableにSelectを使うとき、

dt.Select("Value = '" + value + "'");

なんて行うと、valueにシングルクォートが含まれた時にエラーになります。
もしシングルクォートだけが問題ならこの文字だけエスケープすればいいのですが、
SQLインジェクションと同じことができそうで、なんかSelectの中の文を
作成してくれるなんとかBuilderみたいなものがありそうな気がしたのですが
探しても出てきません。valueは外部から与えられるとき、安全でエラーなく
dt.Selectを実行するなんか対策方法はないでしょうか。
5デフォルトの名無しさん (ワッチョイ ef4f-rckI)
垢版 |
2019/05/17(金) 06:38:03.53ID:pevdljBD0
いつからかは定かではないけど気付いたのは2週間ほど前
埋め込んだPMG画像のX軸方向の表示比率が狂ってフォームのレイアウトがずれる現象が起こった
「あれ−プロパティの設定間違えたままビルドしたのかな?確認しなきゃー」と思っていたら
今朝見ると元に戻ってた
なんで???こんなこと起こる物?
Windowsのアップデートに関係あるのかな?
2019/05/17(金) 07:11:50.30ID:GiXqVPbm0
e.Data.GetData(DataFormats.FileDrop)
ドラッグエンターされたファイルのファイル名を取得したいのですが、
wpfだとfiledropのインテリセンスが出ません
方法が変わっているとしたら、参考ページを教えてください
エクスプローラのような表示がしたいのです
2019/05/17(金) 07:20:19.39ID:9MJvTMs2M
ダッセw
2019/05/17(金) 07:44:53.08ID:YBOnmRBMd
>>5
あるよ
2019/05/17(金) 08:11:02.59ID:gZLbXhzCd
>>5
winupdate関連ならこういうのとか?
https://qiita.com/CodeOne/items/22004635d3c7cc533e5e
10デフォルトの名無しさん (ワッチョイ ef4f-rckI)
垢版 |
2019/05/17(金) 08:20:13.62ID:pevdljBD0
>>9
あーなんかコレっぽいな
PNGがずれたんじゃなくてフォーム自体が横伸びしたのか
ありがとう
2019/05/17(金) 08:44:00.43ID:65sULU0k0
>>4
SQLインジェクションはエスケープされないクォートを混ぜてやるものだから
あんたの思い過ごしだよ
2019/05/17(金) 11:39:10.48ID:8VLhbVxR0
>>4
Ruby, PHP などのフレームワークで使う、
place holder みたいに、値だけを安全にはめ込むやつだろ

SQL インジェクションでは、; で一旦、文を終わらせてから、
また違う文をつなげてくる奴もいる
2019/05/17(金) 12:08:51.26ID:GiXqVPbm0
wpfのリファレンスってどこにあるんですか?
特にないのですか?
14デフォルトの名無しさん (ワッチョイ f82d-Q2B8)
垢版 |
2019/05/17(金) 15:30:49.88ID:JF+UKpuC0
>>13
ちょうど専用スレが立ったっぽいから、そっち行ったほうがいいんじゃない?
http://mevius.5ch.net/test/read.cgi/tech/1557960752/l50
2019/05/17(金) 16:22:19.88ID:GiXqVPbm0
↑どうも 了解です
2019/05/18(土) 06:49:02.88ID:M6x4drXG0
イベントというのはすべて
mainwindow.xaml.cs
に追加されるんですか?

自分で作ってcsファイルなどに分けないとコードでごっちゃになるんじゃないでしょうか
イベントは
mainwindow.xaml.cs
に置いて、
処理部分は他から呼び出すというセオリーなんですかね
2019/05/18(土) 09:42:52.47ID:GEx07AN40
設定用のクラスを XmlSerializer を使ってファイルに保存しています。
デシリアライズ時に例外が起きた時、とりあえず今はあきらめて新たにクラスを初期値で生成するようにしています。
このとき、せめて例外が発生した変数だけ初期値にするとかの対処をしたいのですが、どのようにすればいいのでしょうか。

そんなにはないのですが、書き出した設定ファイルを人が編集するのにある程度耐性を持たせたいと思っています。
特に enum は綴り間違うとすべてがパーになるので。
2019/05/18(土) 10:39:13.87ID:7Pnn73GQ0
>>17
だったら設定値編集するツールでも作れ

パンピーにxmlの編集はできそうで無理
すぐに階層ぶっ壊す
どこでエラーが出たのかわからない
せめて読み込んだときに○行目でエラーですよとか
括弧の対応付が腐ってますよとか
出れば・・・それが直せる人間ならエラー出さん気もするが
2019/05/18(土) 10:54:32.86ID:oTYVhQug0
>>17
それC#というか設計の問題に見える
要素ごとにチェックして例外を検出したところだけ差し替えるって泥臭い方法しか無いんじゃね
2019/05/18(土) 11:06:09.13ID:tLFT43eQM
まあSAX系のParser使えば済むだろ
XmlSerializerはガタガタ文句を言わない奴が使うもんだ
2019/05/18(土) 11:37:15.79ID:fYyO/h33F
設定ファイルとして使うならJSONの方がユーザーが扱いやすいよ
2019/05/18(土) 11:38:53.24ID:7Pnn73GQ0
>>21
あれ、編集できる猛者はバイナリでもやってくれそう
2019/05/18(土) 12:00:07.41ID:R06AaKeM0
jsonもxmlも手作業で編集させない前提じゃないと無理だと思う
あえてやる人は自己責任で放置
24デフォルトの名無しさん (ワッチョイ 6502-qY1O)
垢版 |
2019/05/18(土) 12:42:19.98ID:OQYrbR790
>>17
適当だけどシリアライズする時にいじられる可能性があるファイルとは別にバックアップファイルも作っておけば?
失敗したらバックアップファイルから読み込むとか
2019/05/18(土) 15:49:30.00ID:GEx07AN40
どうも、色々有り難うございます。
やっぱりかゆいところに手が届くようにするには全部自分でヤるしかないんですねえ。

>>24
一応それだけはやってます。

まあ、XML 形式は人間がいじるには不便なので、昔ながらの ini ファイル形式の処理なども検討してみます。
2019/05/18(土) 17:42:36.41ID:eMzBQbdsd
>>25
ini使うんだったらJSONの方が使い勝手いいよ
JSON.NETで簡単にシリアライズできるし
2019/05/18(土) 18:00:47.70ID:GtOtQ7tSd
結局、key valueだったらjsonだわな。
2019/05/18(土) 19:40:41.40ID:7Pnn73GQ0
CSVならエクセルで開けんで?
2019/05/18(土) 22:05:43.33ID:XXYGI5ia0
ini ファイルは古い。
XML, JSON, YAML, CSV

Vagrant, Chef ではRuby、Gradle ではGroovy など、
プログラミング言語そのものが設定ファイルになるのが、間違いが少ない
2019/05/18(土) 22:16:44.23ID:AjHoo0DiM
ini (プロファイル)よりCSVの方が古い
件について小一時間

SuperCalc形式だものね
2019/05/19(日) 14:54:54.80ID:Tz3mdNYZ0
jsonってコメント書けるの?
2019/05/19(日) 15:18:17.73ID:ZizjC4JWp
書けないンゴ
2019/05/19(日) 15:31:02.10ID:gLWKrV0ia
今更だけど>>17はすげえ面白い発想だなw
この発想はなかった

他の人も書いてるけど、「手動で編集して壊してももそれなりによきに計らうようにしたい」
って発想がそもそも合理的じゃないね。
労力の使い方が間違ってる。

編集させたいなら編集できるツールを提供するのが筋でしょう普通に
2019/05/19(日) 15:43:58.11ID:5QEI0n2d0
>>4
亀だがLINQ使えば?
2019/05/19(日) 16:58:39.64ID:Sq+osQsS0
てかxmlって俺らは読みやすいけどパンピーには編集不能だし
xmlって客の利点は1つもないよ
お客に「え?そのフォーマットって俺等になんの利益があるの?」
って言われてはじめて気づいたけどな
コメントもかけないし
書いても次の出力で消えるし
2019/05/19(日) 17:36:13.38ID:rIeXrTmo0
>>35
> コメントもかけないし
<!-- え? -->
2019/05/19(日) 18:02:37.75ID:Sq+osQsS0
>>36
ん?ユーザが書き込んだコメントを
次の出力で出せるの?
2019/05/19(日) 18:03:37.96ID:d2+mGljV0
別にxmlになったから読みやすいとか無いけど
プログラムとかライブラリが読みやすいでは?
2019/05/19(日) 18:03:41.06ID:W8L8TXY00
>>35
読みやすいかな?
そりゃ意味はわかるけど、読みやすくはないなあ。
2019/05/19(日) 18:05:20.48ID:Sq+osQsS0
>>39
プログラムから読み込み易いってこと
2019/05/19(日) 18:08:33.90ID:QuCKjtMQd
>>35
コメントは書けるだろ
2019/05/19(日) 18:11:37.65ID:Sq+osQsS0
>>41
書いたコメントを読み込めない
2019/05/19(日) 18:13:57.67ID:QuCKjtMQd
>>42
DOM使えば読み込めるよ
2019/05/19(日) 18:14:01.15ID:Tz3mdNYZ0
>>42
c# - XmlDocument reading XML Document comment Issue - Stack Overflow
https://stackoverflow.com/questions/6468994/xmldocument-reading-xml-document-comment-issue
2019/05/19(日) 19:01:25.29ID:QuCKjtMQd
xmlよりもjsonの方がかなりデータサイズが小さいからファイル保存にしても通信文にしても最近はjsonの方を使ってるわ
2019/05/19(日) 19:18:03.58ID:PMIzDMsea
xmlといえば@ITのC#記事でのこき下ろし方が
まるでxmlに親でも殺されたかのような書きっぷりで笑えた記憶が
2019/05/19(日) 19:19:08.50ID:rIeXrTmo0
>>37
出力が何を示すのか知らんけどコメントのためのクラスもあるから適切に処理すればコメントも扱えるよ
https://docs.microsoft.com/ja-jp/dotnet/api/system.xml.xmlcomment?view=netframework-4.8
2019/05/20(月) 01:15:28.17ID:ee7ewuKV0
データの一時保存のためにXMLエディタみたいな機能積むのは嫌だ。
自己データの保存用のXMLなんだから不必要なタグや属性は無視したいよ。
ただ、どんな保存形式であれ不正データの発生は防ぎきれないから質問主の方針には賛成する。
不正データな時点で内容が信用できないと判断してオール初期化するのも悪手ではない。
2019/05/20(月) 01:26:07.42ID:K7mtfUzra
質問内容は不正データを排除する方法じゃなくて、
手動で編集されて(あるいは別の理由で)「壊れた」データからでも読める部分だけでも読めないかって話だから
2019/05/20(月) 03:34:53.02ID:ittsRsgU0
手っ取り早いのはシリアライズするenum型のプロパティをstring型に変更して想定値以外に編集されてもExeceptionが発生しないようにすることでしょうな
2019/05/20(月) 07:13:37.85ID:h4Os3XI/M
不正データを排除って言っても
> 特に enum は綴り間違うとすべてがパーになるので。
ぐらいだけなら>>50とかの対処療法でなんとかなるけどタグ名の間違いとか文字列のダブルクォーテーションの抜けとかまで言い出したらパーサーを作り直すに近いことになるからそんな所で苦労するなら>>33の言うようにツールなりを提供した方が楽
2019/05/20(月) 08:04:55.23ID:WRHDTme5a
属性を持たせたいならxml一択
2019/05/20(月) 08:07:45.04ID:MXQiPVhxM
そもそもxmlを編集する有名なツール自体がない
あってもとても一般人には触れない代物

人に編集させたいくせにあえてこのフォーマットにする意味がそもそも皆無
エクセルでも読めないし
一体どうして欲しいのか?
別の設定ツールを作るときにプログラムから読み書きがしやすいってただそれだけだろ
んでツールの提供も嫌だって言うんじゃ
メリット皆無
そもそもxmlを選択した時点で担当者は無能で死刑
2019/05/20(月) 09:18:28.49ID:1dspVVtJd
えくせるwww
55デフォルトの名無しさん (ワッチョイ 6e7c-Q2B8)
垢版 |
2019/05/20(月) 11:20:58.13ID:g1Dx2x5o0
xml は糞
2019/05/20(月) 15:53:54.65ID:IYtfHjiI0
以下のように非async関数proc1から、awaitが必要な関数proc3を呼び出すのに async void の関数proc2を挟んでいます。
この時、proc3/proc2のすべての処理が終わってからproc1に返ってきてほしいのですが、ログを確認すると

Enter proc2⇒Enter proc3⇒proc3 start⇒Exit proc2⇒proc3 end⇒Exit proc3
となってしまいます。

Enter proc2⇒Enter proc3⇒proc3 start⇒proc3 end⇒Exit proc3⇒Exit proc2
という順序で実行させるにはどうすれば良いのでしょうか。

private void proc1()
{
  Debug.Write("Enter proc2");
  proc2();
  Debug.Write("Exit proc2");
}
private async void proc2()
{
  Debug.Write("Enter proc3");
  if(await proc3())
  {
    foo();
  }
  Debug.Write("Exit proc3");
}
private async Task<bool> proc3()
{
  Debug.Write("proc3 start");
  await bar();
  Debug.Write("proc3 end");
  return true;
}
2019/05/20(月) 16:29:27.47ID:UpaSmFYv0
>>56
proc1でproc2をawait
2019/05/20(月) 16:48:17.44ID:IYtfHjiI0
>>57
proc1は同期メソッドなので、await proc2(); はできません。
2019/05/20(月) 17:25:01.51ID:UpaSmFYv0
>>58
なら、proc2.Wait()
2019/05/20(月) 17:25:01.60ID:wrDP3R9n0
async Task proc2()
にして
proc2().GetAwaiter().GetResult();
とか
2019/05/20(月) 17:58:04.54ID:IYtfHjiI0
>>59
そんなやり方があったんですね。

ただ、async void proc2() だとエラーになったので async Task proc2() に変更して希望の動作になりました。

ありがとうございます。
2019/05/20(月) 18:13:28.96ID:yAZ6lWg7a
イベントハンドラーなど戻り値をvoidにするしかない場所でだけ、async voidを使うべき
それ以外はasync Taskかasync Task<T>を使おう
http://neue.cc/2013/10/10_429.html
■ このスレッドは過去ログ倉庫に格納されています