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

■ このスレッドは過去ログ倉庫に格納されています
2017/10/09(月) 19:00:56.93ID:Y4203ffV0
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part131
http://mevius.5ch.net/test/read.cgi/tech/1504861931/
■関連スレ
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://mevius.5ch.net/test/read.cgi/tech/1492843013/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/11/03(金) 18:37:57.11ID:QTbHfBOQ0
>>794
c#歴10年のヤツのコードなのだ。
当然foofunc内でtry/catchがあり戻り値にエラー有無が返る。
愚痴ってスマヌ。
2017/11/03(金) 18:41:43.76ID:lrZzjWeI0
>>792
そういうのって、C#でって言うのかな。
2017/11/03(金) 19:35:14.12ID:Xp/sMfFK0
>>791
最低限の要件だけ勝手に解釈してこんな感じ
https://ideone.com/j4HMm8
798デフォルトの名無しさん (ワッチョイ 2ee8-zAbU)
垢版 |
2017/11/03(金) 19:43:53.45ID:ZqwqQq4y0
imagemagickってソースに組み込める何か提供してるん?
2017/11/03(金) 19:44:48.34ID:EmHaDWp+0
大昔にマスク画像を作っていたのを思い出した
2017/11/03(金) 20:02:57.12ID:Xp/sMfFK0
ついでに補足しておくとMarshal.ReadInt32でなくMarshal.Copyでバイト配列で4バイトずつ読めば
Blue,Green,Red,Alphaが取れるから許容範囲設定とかしたかったらそっちで
2017/11/03(金) 20:15:49.55ID:WHWgtK+kr
経験年数と理解度?にどれだけの相関関係があるのか
疑問が生じている今日この頃
2017/11/03(金) 20:20:24.80ID:aVxxhWTE0
相関関係はある
但し個人差は大きい
2017/11/03(金) 20:26:05.42ID:QTbHfBOQ0
>>798
https://www.imagemagick.org/script/develop.php
2017/11/03(金) 22:49:49.36ID:om2fc3b00
>>793-794
refで渡せば、呼び出し先の関数で、呼び出し元の変数のインスタンスを変更できる

これをやりたい状況がどれだけあるかとか、やるべきかどうかとかはおいといて
なんの意味もないわけではない
2017/11/04(土) 00:09:44.98ID:3cC+jj+w0
>>793のケースで意味がなさそうって>>793,794は言ってるのに、
>これをやりたい状況がどれだけあるかとか、やるべきかどうかとかはおいといて
とか一般論を言い出してそのつっこみよくわからん。
806デフォルトの名無しさん (ワッチョイ c2f7-48Ez)
垢版 |
2017/11/04(土) 01:46:45.24ID:qZ8I6rgd0
>>797
ありがとうございます。
ほぼ真っ黒になってしまったのでRGB値で範囲指定できる様にやってみます。
2017/11/04(土) 04:11:36.08ID:MnNwpnC60
>>804
君も参照型を理解してないね。
2017/11/04(土) 08:41:31.55ID:sTeHaJ1X0
>>807
この話の流れに>>804がふさわしいかどうかはおいとくとして...

> 君も参照型を理解してないね。
ちょっと説明してみ
2017/11/04(土) 09:02:47.97ID:5h9DYzfZ0
DataTable dt = new DataTable();

bool foofunc(ref DataTable dt)
{
  DataTable dt = new DataTable();
  ・・・・
  adapter.Fill(dt);

「なんの意味もないわけではない」のコードにはなったが
更に輪をかけた馬鹿コードに進化させてみた。 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
2017/11/04(土) 09:17:38.08ID:5h9DYzfZ0
DataTable dt = new DataTable();

bool foofunc(ref DataTable dt)
{
  dt = new DataTable();
  ・・・・
  adapter.Fill(dt);

間違えてたw
2017/11/04(土) 09:19:39.29ID:flyq3nv80
それじゃただのoutじゃんrefの意味じゃないじゃん(難癖
2017/11/04(土) 09:48:23.86ID:5h9DYzfZ0
>>811
そう、参照型にrefは無意味なのです。

参照型が分かってないよりこのコードが問題なのは、
検査結果を引数に返して実行エラーの有無を戻り値で返していること。

参照型も理解していないが例外処理はもっと理解していない糞野郎のコード。
2017/11/04(土) 09:51:19.52ID:5h9DYzfZ0
×検査結果
○検索結果

スマン、寝ぼけてるわ
2017/11/04(土) 10:16:12.92ID:q474DaJy0
>>812
Dictionary.TryGetValue()とかあるし、そこはケースバイケースかな。
参照型にref付けてるくらいだから、何も考えてないのかも知れないけど。
2017/11/04(土) 10:20:08.20ID:5h9DYzfZ0
>>814
public bool TryGetValue (
  TKey key,
  out TValue value
)

refじゃなくてoutやないかい!
2017/11/04(土) 10:29:08.52ID:q474DaJy0
そうだった。>>811とまざった。
こっちも寝ぼけてるねw
2017/11/04(土) 10:29:22.28ID:fyiwYE9E0
つまり
>>793

DataTable dt = new DataTable();

bool foofunc(DataTable dt)
{
  ・・・・
  adapter.Fill(dt);


とは同じ結果になると
2017/11/04(土) 10:37:55.56ID:q474DaJy0
>>815
まぁ、outにする必要はあるけど、
「検査結果を引数に返して実行エラーの有無を戻り値で返していること」
自体に問題はないな。
2017/11/04(土) 10:38:05.17ID:OcSSsXSe0
この手のメンバ変数に検索結果をセットする時はこんな感じにして、例外処理は基本呼出側に任せちゃうんだけど問題あるのかね?
前はエラーコードのEnum返してたけど、エラーケースの殆どが例外処理で扱われる物ばかりだったので止めちゃった

DataTable dt = new DataTable();

Void SetHoge(DataTable dt){
    ・・・・
    adapter.Fill(dt);
}
2017/11/04(土) 10:56:19.06ID:q474DaJy0
>>819
それで良いと思う。
上のみたいに成功したかどうかを返り値で返すのは、
正常運用の範囲内で失敗する場合があるのを想定している場合。
2017/11/04(土) 12:23:07.70ID:5h9DYzfZ0
>>819
自分ならこうするけど。

DataTable GetHoge()
{
  var dt = new DataTable();
  ・・・・
  adapter.Fill(dt);
  return dt;
}
2017/11/04(土) 13:59:17.12ID:dOyJdliUp
>>821に1票
2017/11/04(土) 14:56:00.76ID:ePC4mkkA0
参照型にrefは無意味って言ってるやつは
呼び出し元変数のインスタンスを変更「できる」
ってことをどう評価してるのか
2017/11/04(土) 15:15:02.21ID:Vg1Izipf0
型がわからない変数と同じ型の変数を用意したいときってなんか記述方法ある?
型を調べるとかじゃなくてプログラミング的に解決する手法あったら教えて
2017/11/04(土) 15:24:28.88ID:m6ZusNHm0
型引数で解決できるならそれで
2017/11/04(土) 15:24:47.55ID:Yg7qqeZtd
>>824
ヴァーか?
2017/11/04(土) 15:41:42.41ID:WuSfeAlZa
>>824
var y = 謎の変数x;

っていうか、たぶん何か勘違いしてると思うw

「型が分からない変数」っていうのは実行時に型が決まるって意味なんだろうけど、
変数の型は静的に(コンパイル時に)確定しているのでそれはありえない

それとも匿名型のことを言ってる?
2017/11/04(土) 15:49:14.84ID:jl0ZLZ4q0
dynamic型ならコンパイル時の型チェックは行なわれず実行時に解決するね
2017/11/04(土) 15:52:54.75ID:WuSfeAlZa
>>828
いや、「変数の型」は静的に決まるでしょ。自分でdynamic型って書いてるじゃんw
2017/11/04(土) 15:55:26.19ID:tIYipYwe0
>>824
var x1 = new X();
var x2 = Activator.CreateInstance( x1.GetType() );
2017/11/04(土) 16:13:39.02ID:sTeHaJ1X0
>>823
まあそれが必要なケースがほとんどないし
2017/11/04(土) 16:19:15.36ID:2EEZfJvra
引数のnullチェックして必要ならインスタンスをnewしてつけられる
2017/11/04(土) 16:41:13.06ID:tIYipYwe0
バットノウハウっぽい
2017/11/04(土) 16:43:39.78ID:FXv0ObyH0
>>833
バットは関係ないやろ
2017/11/04(土) 16:53:42.21ID:/YBu7JsUM
>>832
出来るが引数がnullな時点でArgumentException飛ばすんで実用価値はほぼないな。
2017/11/04(土) 16:58:31.41ID:tIYipYwe0
>>834
関係ないな。しょぼい誤字だ。

>>824
何をやりたいか分からないが、ジェネリックメソッドでは目的に沿わないかな。
2017/11/04(土) 17:05:47.97ID:83ZjnaGFa
javascriptみたいなのを想定してるんだろうけど
まあ普通はない
2017/11/04(土) 17:44:10.96ID:SXZaCuwQ0
ベッドノウハウ
しかし俺は未経験
2017/11/04(土) 17:51:46.51ID:sTeHaJ1X0
>>832
だからそんなことが必要になったことがどれだけあるんだ?
2017/11/04(土) 18:10:38.00ID:WuSfeAlZa
なんかしょうもないことで争ってるけど、>>823の方が正しいね

エイリアスの機能がいらないならそもそもrefってキーワードも用意されてないでしょ
負け惜しみでくだらない意地を張るのは子供っぽいよ
2017/11/04(土) 18:13:38.30ID:wTKOoVxtr
ペットノウハウ
ボトルじゃないよ
2017/11/04(土) 18:17:18.92ID:wTKOoVxtr
MSらしく反則技が用意してあるだけ
初心者は使わない方が無難
返り値が二つ以上欲しい時は今なら名前付タプルを使う
2017/11/04(土) 18:26:59.70ID:flyq3nv80
返値代わりに使うのはoutだし今ならって言ってるとおり昔はなかったんだし
ちょっと何言ってるのか分からない
2017/11/04(土) 18:35:14.75ID:sTeHaJ1X0
>>840
> エイリアスの機能がいらないならそもそもrefってキーワードも用意されてないでしょ
???
refって参照型じゃなくても使えるんだが...
参照型にrefを使うことがほぼないだろって話だと思うけどな

> 負け惜しみでくだらない意地を張るのは子供っぽいよ
自己紹介は要らんよ w
2017/11/04(土) 18:40:28.61ID:WuSfeAlZa
>>844
意味が分からない

変数の値の利用と書き換えの両方が必要かどうかは、その変数の型が
参照型であるか値型であるかは関係ない。

何を言ってんの?
しかし、いい歳こいて幼稚な奴って嫌だねほんと
2017/11/04(土) 18:43:37.92ID:OcSSsXSe0
>>842
名前付きタプル使いたいけどVS2013限定という変な縛りに囚われているわ
フレームワーク縛りは判るけど、IDEのバージョンを縛る理由ってなんなんだろう
2017/11/04(土) 18:58:38.30ID:3Qk/5QRnM
古いコンパイラでビルドできなくなるだろ
俺個人としては大した問題ではないと思うけど、大した問題だと考える人がいるのは普通に理解できるぞ
2017/11/04(土) 19:12:51.54ID:sTeHaJ1X0
>>845
> 変数の値の利用と書き換えの両方が必要かどうかは、その変数の型が
> 参照型であるか値型であるかは関係ない。
えっ?
普通にググればrefが値型と参照型でどう使われてるかわかると思うんだが...
引っ込みつかなくなってるのかな

> しかし、いい歳こいて幼稚な奴って嫌だねほんと
また自己紹介ですか? w
2017/11/04(土) 20:19:58.00ID:m6ZusNHm0
幼稚呼ばわりが得意なのはかの例外を握り潰す人だが
2017/11/04(土) 20:22:16.23ID:m6ZusNHm0
ようするにキチガイなので相手にしなくてよいという話
2017/11/04(土) 20:45:43.86ID:5h9DYzfZ0
>>840
とりあえず、refは値型以外には使い道が無いのは確定で。
2017/11/04(土) 20:48:54.35ID:wTKOoVxtr
>>846
2017?
2017/11/04(土) 20:49:38.51ID:mF4CZaPha
>>848
マジモンかよ

俺個人が使うか、あるいは一般に多用されるかどうかはともかく、
参照型であろうと変数の値(つまり参照)そのものを書き換えたいケースは存在すると思われる。

たとえばStringのようなイミュータブルな型や配列の長さのように変更できない要素を
持つ型の場合、元の値を利用しつつそれを加工した値を返すにはrefを使うしかない
2017/11/04(土) 20:50:11.25ID:jl0ZLZ4q0
最近見たrefはBindableBaseの中だったな、ref Tとかジェネリックの場合
普段は使わないね
2017/11/04(土) 21:08:51.42ID:uh9vgcan0
議論ごっこやりたいのなら
ふらっと C#,C♯,C#(議論用)
http://mevius.2ch.net/test/read.cgi/tech/1469538912/
で好きなだけやってくれ。ワッチョイもないから
2017/11/04(土) 21:14:23.59ID:5h9DYzfZ0
意味もなく
try
{
  ・・・
{
catch
{}

try
{
  ・・・
{
catch (Exception ex)
{
  throw ex;
}
するヤツってアフォですか?
お願いだから辞めてください。
2017/11/04(土) 21:16:19.73ID:mF4CZaPha
>>856
プログラマがそこで例外が発生しうることを認識してそのコードを書いていることを
明示する意味はあるよ。

>>851といい、ちょっと単細胞過ぎないか?
2017/11/04(土) 21:28:09.69ID:sTeHaJ1X0
>>850
了解
>>853を見る限りおまえの言う通りだな

>>851
さすがにそれは極論過ぎ
2017/11/04(土) 21:30:25.68ID:VAjFkczd0
>>857
え?
2017/11/04(土) 21:49:38.46ID:FXv0ObyH0
>>857
c#で>>856やるとそこまでのスタックトレース消し去ることになるんだけど正気?
2017/11/04(土) 21:49:52.84ID:jdRJf/Av0
ファイルが読めない程度で例外返すクラスとか一旦握り潰して動作を変えたい
2017/11/04(土) 21:53:09.24ID:J+hizfOLd
>>861
c#使うのやめた方がいいな
2017/11/04(土) 22:02:23.28ID:5h9DYzfZ0
>>862
go言語が例外処理の機能を無くした理由の1つは、大半のプログラマーが例外処理を正しく扱えないから。
本当にそう思うよ。
2017/11/04(土) 22:06:52.22ID:mF4CZaPha
>>860
まあ後者はたしかに普通やらないと思う。
ただ、例外情報なんて必ずしも常に必要とは限らない。
2017/11/04(土) 22:07:27.03ID:/B23IXM6M
>>861
関数の返り値でエラー処理したい人?
2017/11/04(土) 22:09:09.61ID:KEPGzX0z0
>>863
C#使うのやめてGo使った方がいいな
2017/11/04(土) 22:12:09.30ID:mF4CZaPha
>>865
TryXXXなんてのがあるように、そもそも成功したかどうかしか関心がない場合もあるでしょ
2017/11/04(土) 22:12:58.59ID:5h9DYzfZ0
>>866
Go言語もまともには扱えないと思う。
2017/11/04(土) 22:14:37.92ID:5h9DYzfZ0
>>867
それは例外でエラーを拾はないでエラー処理をしたい場合。
例外処理は少々重い。
2017/11/04(土) 22:19:20.92ID:48c6JPwZa
例外は便利だよ
変な使い方しなければ
2017/11/04(土) 22:23:38.64ID:/B23IXM6M
>例外処理は少々重い。
初回の例外発生の時にその例外クラスがロードされるみたいなんだけど、その事?
2017/11/04(土) 22:40:21.94ID:FXv0ObyH0
>>864
常に必要ではないが、それをわざわざ消す必要があるか?
2017/11/04(土) 22:40:24.62ID:WGNINBFE0
ファイルを削除や移動する前に、他のソフトで使用中かどうかを調べるのに
R/Wモードでオープンしたときに例外が発生するかしないかで判断するしか無い
この処理のときはcatchでfalse返して例外を握りつぶしている
2017/11/04(土) 22:56:58.41ID:mF4CZaPha
>>872
まあ、たとえ使わなくてもInnerExceptionに食わせて再スローした方がベターだとは思う
2017/11/04(土) 22:59:45.13ID:FXv0ObyH0
>>874
Java出身の人がよくやる勘違いだよね
2017/11/04(土) 23:37:22.84ID:48c6JPwZa
例外で何を伝えたいかどう制御したいか決まってなければ迷うかもしれない
例外出ても継続できる内容なのかもあるかな
877デフォルトの名無しさん (ワッチョイ c28a-cDlW)
垢版 |
2017/11/05(日) 00:13:35.57ID:m9wZGInC0
例外をどこで処理するか(または投げっぱなすか)という基準をきちんと決めないとカオスになりがち
でも事前に決めて徹底させるのが難しい場面も多いのよね
878デフォルトの名無しさん (ワッチョイ 2ee8-zAbU)
垢版 |
2017/11/05(日) 00:49:39.43ID:/t3HbS0w0
タスケテ!!!
RARを回答する方法がわからないの!
なんか組み込みでいいのないの!?
2017/11/05(日) 00:53:25.52ID:yAuwzX3k0
>>878
7Zipのライブラリで回答できた
https://sevenzip.osdn.jp/sdk.html
使い方はすっかり忘れたから聞かないでくれ
2017/11/05(日) 00:55:50.51ID:eJ/HGJ4TM
コトリンの恐怖がおんどれらを襲うwww
2017/11/05(日) 01:34:09.45ID:27Wvnc5t0
適当に検索してみたら、それなりにref stringとかを伴うコードがあった
最近のref絡みの言語拡張を見てもコンパイラ絡みのガチガチに最適化するところとかはref引数の使いどころがあるっぽい
https://github.com/dotnet/corefx/blob/ab0c04f10c8094731d13de6f0ceaa71dd776aa00/src/System.CodeDom/src/System/CodeDom/Compiler/Executor.cs

あと、二重ポインタを扱うPInvokeとかでもでてくる
2017/11/05(日) 01:47:27.68ID:+CtSMn6Br
CodeDomだからC#創成期だね
いわゆるひとつのレガシー
883デフォルトの名無しさん (ワッチョイ 2ee8-zAbU)
垢版 |
2017/11/05(日) 01:51:07.20ID:/t3HbS0w0
>>879
ぐぬぬだよ!
exeとdll持ってきてコマンドラインにするかあ
884デフォルトの名無しさん (ワッチョイ 2ee8-zAbU)
垢版 |
2017/11/05(日) 02:12:10.73ID:/t3HbS0w0
外部のexeをインスタンス化してそれにコマンド発行ってできる?出来た気がする
7Zipを複数起動して複数ファイルの圧縮と解凍をしたいのよ
885デフォルトの名無しさん (ワッチョイ 2ee8-zAbU)
垢版 |
2017/11/05(日) 02:25:25.39ID:/t3HbS0w0
ProcessStartInfoか
なんでもないです
2017/11/05(日) 03:06:49.05ID:5Sua66ij0
>>884
ファイルIO絡むから、複数同時に動かすとむしろ遅くなるんじゃないかな。
887デフォルトの名無しさん (ワッチョイ 2ee8-zAbU)
垢版 |
2017/11/05(日) 04:13:51.92ID:/t3HbS0w0
>>886
えー
SSDやRAMに出しても?
メモリ内で解凍してデータ加工して再圧縮できない?全部メモリ内で

外部ツール使ってたら無理か
2017/11/05(日) 07:19:38.45ID:3uuR82Hq0
>>881
夜中まで必死にググった努力は認める w
>>882の言うように今時としてはいまいちのコードだよ
2017/11/05(日) 07:21:17.15ID:eAtbP2F40
「ref string」が何に使えるかは置いておいて、これで合ってる?
ttps://ideone.com/k9UegY
2017/11/05(日) 07:24:20.42ID:3uuR82Hq0
>>886
むしろI/O絡むから複数同時の意味がある
2017/11/05(日) 08:45:03.60ID:TvjmwwI20
>>871
仕組みは良くわからんけどスタックトレースを辿るとかの処理が重いと思ってる。
速度の必要の無い処理はオレオレ例外投げてエラー処理してる。
その方がコードがスッキリ書けるし。
2017/11/05(日) 08:47:05.58ID:TvjmwwI20
>>881
いつの間にか、ref 参照型 は不要から ref 全て不要に変わってるし。
ref 値型は必要でしょう。
2017/11/05(日) 09:02:12.28ID:TvjmwwI20
>>877
例外をどこで処理するかは非常に簡単だが皆分かってない。

・例外をcatchして処理できる場合はcatchして処理する
・処理できない場合は何もしなくて(無駄にcatch throwもしない)呼び出しもとに任せる
・最後はAppDomain.UnhandledException等で拾ってログ吐いて落とす

何も出来ないのにcatchしてエラーメッセージだけ出すヤツ多すぎ。
2017/11/05(日) 09:14:14.87ID:dh3CGsv/0
言語仕様としてref値型が必要なのはわかるけど
じゃあ使うかというと使わないかな
もう何年も書いた記憶がない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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