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

■ このスレッドは過去ログ倉庫に格納されています
2017/11/28(火) 21:30:48.55ID:7U+HR4FY
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

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

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

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

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part133
http://mevius.5ch.net/test/read.cgi/tech/1510056685/

■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/

■コードを貼る場合は↓を使いましょう。
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
33デフォルトの名無しさん
垢版 |
2017/11/29(水) 20:53:11.64ID:bodUKsOx
>>32
基本的には出来ないし自動だけどunsafeコンテクスト内なら可能
http://ufcpp.net/study/csharp/sp_unsafe.html
34デフォルトの名無しさん
垢版 |
2017/11/29(水) 21:01:58.77ID:MDGjrLn/
>>33
バッファの確保できるんだ
ありがとう
2017/11/29(水) 21:17:10.66ID:W1Zobeto
いやmalloc的なのは普通の配列のnewかMarshal.AllocHGlobalだろ
2017/11/29(水) 21:41:03.14ID:GyXUhAN/
ただいま勉強中なのですが、↓のようなコードの設計、ネーミングその他は適切でしょうか?
身近に現役プログラマーの方がいないためいろいろと聞けないのが現状です。
なんでも指摘してくださると助かります。

public static class DirectoryUtils{
public static string ErrorMessage { get; private set; } = null;
public static bool DeleteFiles(string directoryPath) {
if (!Directory.Exists(directoryPath)){
ErrorMessage = "ディレクトリが存在しません";
return false;
}
try {
foreach (var file in Directory.GetFiles(directoryPath)){
File.Delete(file);
}
}catch (Exception exc){
ErrorMessage = exc.Message;
return false;
}
return true;
}
}
使う側
var success = DirectoryUtils.DeleteFiles(directoryPath);
if (!success){
MessageBox.Show(DirectoryUtils.ErrorMessage);
return;
}

//総変換数を求める
var totalNumber = GetNumberOfTotalConverting()
//Converting,Conversion,All,Total,Number,Count等々、悩んでいます
2017/11/29(水) 21:57:07.61ID:4/Kw2onf
自分だったら
public class DeleteFilesResult
{
public string ErrorMessage { get; set; }
public bool Success { get; set; }
}
みたいなクラス作ってそれを結果として返すかな
38デフォルトの名無しさん
垢版 |
2017/11/29(水) 21:59:38.11ID:bodUKsOx
マジでぇ??
2017/11/29(水) 22:03:52.52ID:3MYeHM6X
>>36
エラーならエラー文字列返して、正常なら空文字かnull返すのが素直じゃないかな?
40デフォルトの名無しさん
垢版 |
2017/11/29(水) 22:10:55.88ID:KZMpS2G2
successならsucceededとかじゃないの
もしくは構造体なりで
if (result == RESULT.OK)
とか
2017/11/29(水) 22:14:46.71ID:fgyKG67K
さっそくでたな

try catchはDeleteFilesメソッドの中じゃなくて
外で使うべき
2017/11/29(水) 22:31:52.96ID:NSRWkE4O
>>36
静的メンバーにエラー情報を持たせるのは時代錯誤で論外。
エラー情報は普通に例外を投げようよ。

単に失敗成功が分かってエラーメッセージが取得できればよいだけなら、
エラーメッセージはoutな引数で戻せばいい

あと、一つのファイルの削除に失敗した時点で処理中断する仕様でいいの?
失敗しても継続する方が自然なような気もするけど...

DeleteFilesより明示的にDeleteAllFiilesの方がいいんじゃないか?
GetNumberOfTotalConvertingは長すぎ
それを含むクラスに適切な名前がついてればそんな冗長な名前にする必要ないでしょ
2017/11/29(水) 22:32:46.18ID:JM2ObBa0
>>41
以前暴れていた
CsvHelper例外で落ちるな糞野郎くんだろう
2017/11/29(水) 22:33:52.93ID:fgyKG67K
DeleteFiles内部でtry catch受けていいのは
そのファイルをスキップして残りを消す場合など
2017/11/29(水) 22:34:19.89ID:fgyKG67K
>>43
人違いだわw
2017/11/29(水) 22:38:45.34ID:fgyKG67K
例外が飛んでそれをもとに制御が変わるなら
適切なtry catchの場所を考えるべき
2017/11/29(水) 22:42:39.35ID:NSRWkE4O
あと、例外についてはとにかく何でもキャッチしたがる人と、
それに対するアンチテーゼで「例外は絶対キャッチするな」と主張する人がいるけど、
どっちも何か盛大に勘違いしてる極論だから眉唾で聞いた方がいいと思う
2017/11/29(水) 22:45:33.13ID:fgyKG67K
そうだね

例外利用するならFile.Deleteのページを見て
どんな例外をスローするか調べたほうがいい

権限無くて削除できないとかあるから
2017/11/29(水) 22:48:25.13ID:rMr3voC1
・ω・Exception
2017/11/29(水) 22:54:19.77ID:+8Yov6n2
頻繁な例外を想定するならロギングで出力した方がいいよ
エラーを毎回表示なんて非現実的だし無視してOK連打したら意味ないでしょ
それよりタイムスタンプつけてテキストファイルに保存した方が後から照会できる

問い合わせの多くは、何もしてないのに突然おかしくなった、というやつばかり
そういう時はログフォルダをzipで圧縮して添付してもらおうというわけ
2017/11/29(水) 22:57:51.57ID:fgyKG67K
状況が許すならDirectory.Delete (string path , bool recursive)を使いたい
2017/11/29(水) 23:02:36.65ID:JM2ObBa0
>>45
人違いなのに丁寧にレスありがとww
2017/11/29(水) 23:02:52.52ID:JGmUTbhc
>>36
同じく静的メンバにエラー状態持たせるのは論外だけど
どうしてもやりたいなら成功時にそれをクリアしないとダメ

bool返すよりoptionalみたいなのを返すのがモダン
2017/11/29(水) 23:03:14.96ID:fgyKG67K
そのフォルダが相手のミスでリードオンリーにされた場合は例外情報が全部死ぬけどな
2017/11/29(水) 23:12:59.73ID:GyXUhAN/
>>36です
こんなにレスがつくとは思いませんでした。みなさんありがとうございます。
@結果を格納するクラスを作成し、それを返し、参照する
Aエラー文字列を返す
B例外を投げるかoutな引数で戻す
どれもそういった発想が無かったので勉強になります。
ちなみにoutを使う場合はtupleを使って2つ返すのもありですか?

>静的メンバーにエラー情報を持たせるのは時代錯誤で論外。
こういう風に指摘されるともっともっと勉強しようと励みになります。ありがとうございます。

>あと、一つのファイルの削除に失敗した時点で処理中断する仕様でいいの?
>失敗しても継続する方が自然なような気もするけど...
たしかに処理の中断をするまでもないですね

例外処理についてはメソッドを呼ぶたびにtry catchを書くのが冗長という理由だけで中にいれてました。
制御が変わるかなど考慮すべきでした

optionalや>もしくは構造体なりでif (result == RESULT.OK) 
などまだまだ理解できない部分が多いので調べてきます
2017/11/29(水) 23:21:16.55ID:GyXUhAN/
>>50
予期せぬ例外は
https://qiita.com/exliko/items/42715a0c9fd7519eb6d9
このような感じでログファイルに出力するようにしていたのですが、
たしかにエラー毎回表示も微妙なので、もっとログをとっていくようにしていきます
2017/11/29(水) 23:30:30.87ID:GyXUhAN/
>>47 >>48
例外が起きた際、個々の例外によって制御を変える場合は個別に書いて、
MessageやStackTraceをロギングして終了するだけの場合はExceptionですべて捕捉する感じですか?
当初はIOException,UnauthorizedAccessExceptionなど書いていたのですが、
結局Messageしか使っていなかったので全ての例外を捕捉するようにしていました。
2017/11/29(水) 23:36:03.91ID:pRhcAUD9
Directory.GetFilesはファイルを全部探してから配列でそれを返すので色々と無駄
列挙するだけならDirectory.EnumerateFiles
2017/11/29(水) 23:48:45.63ID:GyXUhAN/
>>58
直しました。ありがとうございます。
2017/11/30(木) 00:47:19.32ID:HGFQxRVI
教えてもらったことにお礼を言うのはいいとして変える必要があったのだろうか
2017/11/30(木) 00:53:26.33ID:3e4JD2ht
>>55
Tupleでいいけどちゃんと名前付けてね
もしvs使ってるならコード分析かけてみれば?
静的メンバーの公開とかは警告で教えてくれたはず
2017/11/30(木) 02:34:13.97ID:XJSgowiz
>>57
基本的に例外を避けたい理由がなければ例外を使えば良い

ロギングしてアプリを終了するならExceptionでcatch
復帰可能のは個別に対処(ディレクトリが見つからない場合は再入力を求めるなど)
2017/11/30(木) 08:10:34.13ID:fzw2ErB1
>>55
outはもはや要らない子
名前付Tuple使っとけ
2017/11/30(木) 09:21:54.56ID:BGl9IyNc
Tupleってエラーの場合何を返すの?
65デフォルトの名無しさん
垢版 |
2017/11/30(木) 09:22:06.99ID:y7Hhz8p2
トプル
2017/11/30(木) 09:40:45.12ID:BGl9IyNc
bool ok,int unkor,int unkog,int unkob

var unkc = GetUnkoColor();
if(unkc.ok){
成功
}else{
失敗
}

みたいな?
2017/11/30(木) 09:41:02.83ID:kZZqjgS1
Exception
68デフォルトの名無しさん
垢版 |
2017/11/30(木) 09:47:18.95ID:saSKapUF
また、Exceptionが不遇な扱いを受けている
哀れすぎて何も言えねえ
2017/11/30(木) 09:48:16.44ID:BGl9IyNc
また、大して考えず産廃を作った予感
言語開発者暇なのか?
Getしようとしたけど要素がないときもあるじゃん
全部例外で飛ばされるとかマジやめて
70デフォルトの名無しさん
垢版 |
2017/11/30(木) 09:59:17.09ID:saSKapUF
釈尊はnullは「無」であると説かれた
ナムー
2017/11/30(木) 11:21:23.77ID:ptf/uzH7
例外が邪魔とかoutイラナイわめいてるのは大抵Dictonaryでしょ
連想配列は銀の弾丸ではない、期待しすぎ
2017/11/30(木) 11:29:17.22ID:tR5Ha3BP
>>63
>outはもはや要らない子
これは嘘
2017/11/30(木) 11:31:00.67ID:zWPBp6sP
>>66
タプル知らないの?
2017/11/30(木) 11:53:07.37ID:ZqSZg82x
>>73
nullっぽく使えるのある?
2017/11/30(木) 12:25:17.12ID:EK0LYHwo
今はout引数で変数宣言できるようになったからかなりスマートになった
むしろタプルの必要性が疑問なくらい
TryGetXならnull問題もないし
76デフォルトの名無しさん
垢版 |
2017/11/30(木) 12:26:38.17ID:rx1MFcR/
何が返されるか分かりにくいじゃん
タプルで返して分割代入すればいい
2017/11/30(木) 12:29:50.89ID:FnXA8j5a
タプルだったらわかりやすくなる例が思いつかんが
78デフォルトの名無しさん
垢版 |
2017/11/30(木) 12:34:03.03ID:rx1MFcR/
そもそもタプルいらん
2017/11/30(木) 12:47:20.27ID:h6W3uA8y
>>78
訳:新しいことを覚える気力がない
2017/11/30(木) 12:51:45.93ID:Puu3loId
outでもクラスでも構造体でもタプルでも好きなもの使えばいいよ
>>78
いらんというお前のレスがいらん
チラシに書いとけ
2017/11/30(木) 12:52:07.78ID:1mMbqqg+
分散どうやって出すの?
82デフォルトの名無しさん
垢版 |
2017/11/30(木) 12:54:30.58ID:rx1MFcR/
>>81
http://whoopsidaisies.hatenablog.com/entry/2013/11/30/175613
2017/11/30(木) 12:56:35.10ID:SRRUekt+
MS的にはXOrDefaultじゃないの
84デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:04:29.34ID:rx1MFcR/
>>79
.NETライブラリでも使われてないしな
2017/11/30(木) 13:15:30.72ID:RhI3AKYT
outって呼び出す時に一々変数を定義しなきゃいけないのが面倒
Tupleは戻り値が分かりづらいって欠点がある
どちらも一長一短だから好きな方を使えばいい

.NETライブラリが使ってないから使わないって思考停止すぎんだろ
86デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:19:26.22ID:rx1MFcR/
公認じゃない感あるし.NETの関数とマッチしないからな
2017/11/30(木) 13:21:37.72ID:FnXA8j5a
クラス作ろうぜ
88デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:26:10.35ID:rx1MFcR/
>>81
自分で書いてみた。
https://ideone.com/0fyIQN
2017/11/30(木) 13:26:15.27ID:RhI3AKYT
それが一番修正とか楽だしな
クラスは正義
90デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:26:30.06ID:rx1MFcR/
そうそう、クラスでやれってことな。
91デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:35:54.67ID:rx1MFcR/
Average関数もあったんだな
https://ideone.com/0fyIQN
92デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:39:45.69ID:rx1MFcR/
>>88>>91は連動してて同じになっとるわ。
93デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:42:28.63ID:OCgtcJe/
c#が気に入らなきゃMatzみたいにオレオレ言語作れよ
94デフォルトの名無しさん
垢版 |
2017/11/30(木) 14:01:20.98ID:2bRo+qFI
時間帯によってgpuの色味をコントロールするソフトを作りたいです
具体的にはf.luxみたいなソフトを作りたいのですが、かんたんですか?C#でいいんです?
f.luxはガンマ?が高目に設定されるようで、余計眩しく感じたりします
95デフォルトの名無しさん
垢版 |
2017/11/30(木) 14:06:23.80ID:rx1MFcR/
Windows10のナイトモードでいいよ。
96デフォルトの名無しさん
垢版 |
2017/11/30(木) 14:08:43.36ID:2bRo+qFI
時間帯によって徐々に変わるようにしたいのですが
97デフォルトの名無しさん
垢版 |
2017/11/30(木) 14:18:40.16ID:rx1MFcR/
グラフィックドライバの設定を変えるプログラム書けばいいんじゃね?知らんけど。
https://software.intel.com/en-us/forums/developing-games-and-graphics-on-intel/topic/607388
2017/11/30(木) 18:39:49.21ID:yjKo9V4L
>>94
たまに似たような人がいるけど仕様段階で先が見えないくらいならあきらめた方がいい
このスレは設計のアドバイスをする役割ではないから
2017/11/30(木) 18:42:54.90ID:FnXA8j5a
実装のアドバイスもできないけどね
2017/11/30(木) 19:06:36.32ID:YyeHHjlB
画面関係ってOSのAPIレベルで標準化されてるのかな。
Win10だとそれっぽい機能がついてるから存在するのかもしれんが、それ以前のOSには存在しない気が

そもそも、昔よくあったOOPの責務の仕分け問題じゃないけど、画面の調整機能って
本来はモニター側が担当すべき機能でPC側でやるのはいかにも筋悪だよねw
2017/11/30(木) 19:07:49.09ID:WwTER4eR
>>99
お前はな
102デフォルトの名無しさん
垢版 |
2017/11/30(木) 19:09:36.21ID:Wh6PhrD2
スキルの無いやつほど難しい事をやりたがる法則
2017/11/30(木) 19:19:51.31ID:qd73bvGb
まあ、でも、一人も試みるやついないってのも寂しい話だ
2017/11/30(木) 20:49:28.87ID:yjKo9V4L
>>100
アドベガンマが昔からあるのでアプリケーションで変えることはできる
スレ違いだし興味も無いのでこれ以上調べる気にもならない
>>103
やりたい人はやればいい
要件整理からはじめてガチ初心者にずっと教えるのが覚悟できれば
2017/11/30(木) 21:15:26.66ID:ZsTPl3HQ
>>85
c#7の新機能に出力変数宣言(out-var)がある。
これはこれで変数宣言を見落としそうだけど。
2017/11/30(木) 22:31:01.31ID:kZZqjgS1
>>102
賢者は困難を知り愚者は不可能を知らず
2017/11/30(木) 22:54:46.88ID:uf+KIpfb
>>106
愚者は厚顔無恥あり正しい事を指摘するとキレる
108デフォルトの名無しさん
垢版 |
2017/11/30(木) 22:57:13.50ID:lpDomEoB
クッサ
109デフォルトの名無しさん
垢版 |
2017/11/30(木) 23:04:10.82ID:dLltLXuH
値渡しと参照渡しの違いって、エクセルの貼り付けの「値のみ貼り付け」と「すべて貼り付け」みたいなもんですか?
2017/11/30(木) 23:15:31.56ID:wfb+bzow
「図として貼り付け」と「リンクした図として貼り付け」の方が近いかな
111デフォルトの名無しさん
垢版 |
2017/11/30(木) 23:45:15.41ID:dLltLXuH
>>110
なるほど。そこまで外れてなかったようで安心しました。
2017/11/30(木) 23:46:11.61ID:YyeHHjlB
>>109
変数:割り当てられたメモリー上の特定のアドレス範囲
値:変数の中身(変数に割り当てられたメモリーの範囲のバイト列)
参照:変数に割り当てられたメモリーの範囲の開始アドレス

まあ、値がwebページのコンテンツなら参照はそのURIみたいなもの
113デフォルトの名無しさん
垢版 |
2017/12/01(金) 00:04:00.62ID:euIX7D1U
>>112
値をコピーする際にアドレスをよりどころにしているのが参照渡しということですね。
なんとなくイメージはわかるのですがなかなか。
2017/12/01(金) 00:20:18.07ID:g1uYteJH
>>113
何も難しくないよw

2chで言えば参照渡しは人(メソッド)に対してレスのアンカーを示すだけで
中身は教えない。

値渡しはレスの内容のコピペ

参照渡し:
>>113

値渡し:
値をコピーする際にアドレスをよりどころにしているのが参照渡しということですね。
なんとなくイメージはわかるのですがなかなか。
2017/12/01(金) 09:09:10.01ID:0aG9Yubt
C#の次期バージョンではin参照渡しとかreadonly ref structとか参照渡し周りが超絶複雑になるよ
116デフォルトの名無しさん
垢版 |
2017/12/01(金) 09:15:31.37ID:WDfZGQOx
.NETライブラリがそれらを採用しないなら使わん
2017/12/01(金) 09:53:17.68ID:prkNCuF1
>>116
ライブラリってのが何を指してるのかしらんが、CLRはパフォーマンス向上のために採用するだろ
2017/12/01(金) 09:54:03.08ID:2xCFHlEB
なんの思想もなくただ思い付いた機能追加してんな
次世代の課題はどう考えてもコードの自動生成だからな
もうc#にそれを受け切るキャパはないと結論出してくだらん機能追加してんのかな?

この設計を実現するためのこの機能ってのがないよな
2017/12/01(金) 09:57:33.53ID:ey3QBHng
馬鹿は要らん心配しなくていいぞw
120デフォルトの名無しさん
垢版 |
2017/12/01(金) 10:17:38.98ID:iOkVpy7f
>>119
ごもっともだがmsの言語拡張にいったい何パーセントのc#プログラマーがついて行けてるんだろ?
121デフォルトの名無しさん
垢版 |
2017/12/01(金) 10:18:45.36ID:WDfZGQOx
無駄にごちゃごちゃするだけ
要らんやろ
2017/12/01(金) 10:34:20.88ID:THofu70g
>>120
基盤のためだから、馬鹿な一般プログラマーはついていけなくていい
パフォーマンス向上だ間接的な利益を受けるから
2017/12/01(金) 10:37:55.11ID:tm4OIa2O
値型参照関連の新機能はパフォーマンス向上のために追加されるから
使わん奴は一生使わんだろうな
124デフォルトの名無しさん
垢版 |
2017/12/01(金) 11:15:01.09ID:iOkVpy7f
>>122
>>102の法則が発動され中途半端な馬鹿がグダグダで複雑怪奇な(当然バグだらけ)の
コードを量産するから困るのです。
2017/12/01(金) 11:19:59.25ID:KuFa7ekd
馬鹿と一緒に仕事しなければOK
馬鹿に仕事を発注しなければOK
そうもいかないって?馬鹿は大変だなw
126デフォルトの名無しさん
垢版 |
2017/12/01(金) 11:25:04.63ID:iOkVpy7f
受託開発なんて馬鹿の巣窟だわ
2017/12/01(金) 12:24:05.27ID:Y1F3euov
MicrosoftがVBを切り捨てたようにC#も底辺から切り捨てられていく
底辺プログラマの未来は暗い
2017/12/01(金) 12:25:29.05ID:RDzVJ16W
C#は他の言語で便利な機能があれば取り入れようとしてる時期
rubyみたいに何でも取り入れてごちゃごちゃにならなければいいけど

本当の意味で新しい機能はしばらく追加されないだろう
2017/12/01(金) 12:30:03.27ID:ZeZypetk
>>128
それって簡単に言えばなんの思想もないから他言語パクって見ますって話でしょw
2017/12/01(金) 12:33:48.54ID:TMbg8N17
>>129
全部入れてるわけじゃない
思想的にあってるものだけ入れてる

似たような感じだったjavaとも進化の仕方から違いが見て取れるはず
C#の下位がjavaと思ってたけど今は結構違いがある
131デフォルトの名無しさん
垢版 |
2017/12/01(金) 12:42:25.56ID:WDfZGQOx
プログラマとして大事なのはコミュ力だから
2017/12/01(金) 12:52:31.16ID:Y1F3euov
技術力があれば不要なコミュニケーションを大幅ぬ削減できるという事実から目をそらさないで
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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