X



ふらっと C#,C♯,C#(初心者用) Part134
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
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
0007デフォルトの名無しさん
垢版 |
2017/11/29(水) 12:58:28.27ID:VYTpT9vM
>>5
0008デフォルトの名無しさん
垢版 |
2017/11/29(水) 13:06:25.32ID:VdtxEj+u
SQL鯖へのConnectionもUsingの中に入れちゃっていいのかな?

昔は最初にConnection開いて、ずっと開きっぱなしの中で処理して、最後にCloseすることが多かったけど
不安定な接続(スリープで回線断)やミラーリングサーバーを考慮すると、いちいちOpen/Closeしたほうがいい。

だけど、usingの中に入れることで、いちいちDisposeされたら
接続キャッシュが機能せずに体感速度が落ちる、って風になる?
0010デフォルトの名無しさん
垢版 |
2017/11/29(水) 13:46:22.65ID:VYTpT9vM
>>8
SQL鯖でusing多用はいかん
try/finally使ってopen/closeしとけ
速度はopenしっぱなしとほぼ変わらん
0012デフォルトの名無しさん
垢版 |
2017/11/29(水) 14:00:58.53ID:VYTpT9vM
>>11
キミ以外なら
0015デフォルトの名無しさん
垢版 |
2017/11/29(水) 15:37:12.11ID:VYTpT9vM
>>13
disposeしてないよ

何言ってんの?
0016デフォルトの名無しさん
垢版 |
2017/11/29(水) 15:59:59.48ID:TUoM6+wa
>>15
やってることが、using使ったdisposeと等価なんだけど。

usingはtry/finalyの糖衣構文
(sql鯖のコネクションについては)closeとdisposeは等価

何か違いがあんの?
0017デフォルトの名無しさん
垢版 |
2017/11/29(水) 16:18:48.57ID:VdtxEj+u
var SqlConn = new System.Data.SqlClient.SqlConnection(xxxx);

という感じの宣言は try/finaly の外でやっておいて
open/close は try/finaly の中でやる

って意味で書いたと思ってたけど、そうだよね?
0018デフォルトの名無しさん
垢版 |
2017/11/29(水) 16:32:53.30ID:VYTpT9vM
>>16
msdnのSqlConnectionメソッドの
closeとdisposeの説明をちゃんと嫁
0020デフォルトの名無しさん
垢版 |
2017/11/29(水) 16:42:07.66ID:VYTpT9vM
>>19
おじさん?
アフォな専門学校の生徒かと思ったわw

放置プレイしま〜す
0021デフォルトの名無しさん
垢版 |
2017/11/29(水) 16:58:19.20ID:oopkzTyn
SqlConnectionメソッドってのはちょっと分からなかったけど
SqlConnection.Closeにはこう書かれてるな
> SqlConnection は、適用範囲外では閉じられません。
> そのため、Close または Dispose を呼び出して、明示的に接続を閉じる必要があります。
> Close と Dispose は、機能的に同じです。

DisposeはComponent.Disposeに飛ばされたから
そもそもSqlConnection.Disposeのページが存在しない
0022デフォルトの名無しさん
垢版 |
2017/11/29(水) 17:08:15.43ID:TUoM6+wa
>>18
msdnに機能的に等価って書いてあるんだけど、なに読めば良いの?

>>17
try/finalyの外で宣言した変数を使い回すってこと?

usingを抜けなければ、disposeは走らないから、一度開いた同一の接続を使い回すのであればusingの中で、接続(open)を複数回するのであれば、個別の変数を切り直した方が良いと思うよ?
前提が違ってたらごめんね。
0023デフォルトの名無しさん
垢版 |
2017/11/29(水) 17:14:21.18ID:rMr3voC1
アプリは生きててDBだけリセットかけたらもう一回接続しないと駄目?
なんかアクセス毎に開いて閉じて入れておかないと面倒な感じじゃね?
0025デフォルトの名無しさん
垢版 |
2017/11/29(水) 17:58:34.09ID:Ypog5BGe
iPhoneのキーボードのこれhttps://i.imgur.com/PStMLdz.jpgはプログラム書くときのダブルクォーテーションとは違うんだな。ideoneでなぜかエラーが出たので気づいた。
https://i.imgur.com/wyCNyNM.jpgこれだと使える。

英字キーボードのやつ “””””””””””
ABCのほう """""""""""
0030デフォルトの名無しさん
垢版 |
2017/11/29(水) 18:28:48.92ID:Ypog5BGe
ideoneでちょっとした動作を試したりするときだけだな
0031デフォルトの名無しさん
垢版 |
2017/11/29(水) 19:16:09.42ID:Xxg0LpBt
明日屁湧いてるなw
0032デフォルトの名無しさん
垢版 |
2017/11/29(水) 20:50:56.63ID:MDGjrLn/
C#ってmalloc・calloc・realloc的なかんすえはありますか?
全部自動?
0034デフォルトの名無しさん
垢版 |
2017/11/29(水) 21:01:58.77ID:MDGjrLn/
>>33
バッファの確保できるんだ
ありがとう
0036デフォルトの名無しさん
垢版 |
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等々、悩んでいます
0037デフォルトの名無しさん
垢版 |
2017/11/29(水) 21:57:07.61ID:4/Kw2onf
自分だったら
public class DeleteFilesResult
{
public string ErrorMessage { get; set; }
public bool Success { get; set; }
}
みたいなクラス作ってそれを結果として返すかな
0038デフォルトの名無しさん
垢版 |
2017/11/29(水) 21:59:38.11ID:bodUKsOx
マジでぇ??
0040デフォルトの名無しさん
垢版 |
2017/11/29(水) 22:10:55.88ID:KZMpS2G2
successならsucceededとかじゃないの
もしくは構造体なりで
if (result == RESULT.OK)
とか
0041デフォルトの名無しさん
垢版 |
2017/11/29(水) 22:14:46.71ID:fgyKG67K
さっそくでたな

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

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

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

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

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

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

問い合わせの多くは、何もしてないのに突然おかしくなった、というやつばかり
そういう時はログフォルダをzipで圧縮して添付してもらおうというわけ
0053デフォルトの名無しさん
垢版 |
2017/11/29(水) 23:02:52.52ID:JGmUTbhc
>>36
同じく静的メンバにエラー状態持たせるのは論外だけど
どうしてもやりたいなら成功時にそれをクリアしないとダメ

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

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

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

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

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

ロギングしてアプリを終了するならExceptionでcatch
復帰可能のは個別に対処(ディレクトリが見つからない場合は再入力を求めるなど)
0065デフォルトの名無しさん
垢版 |
2017/11/30(木) 09:22:06.99ID:y7Hhz8p2
トプル
0066デフォルトの名無しさん
垢版 |
2017/11/30(木) 09:40:45.12ID:BGl9IyNc
bool ok,int unkor,int unkog,int unkob

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

みたいな?
0068デフォルトの名無しさん
垢版 |
2017/11/30(木) 09:47:18.95ID:saSKapUF
また、Exceptionが不遇な扱いを受けている
哀れすぎて何も言えねえ
0069デフォルトの名無しさん
垢版 |
2017/11/30(木) 09:48:16.44ID:BGl9IyNc
また、大して考えず産廃を作った予感
言語開発者暇なのか?
Getしようとしたけど要素がないときもあるじゃん
全部例外で飛ばされるとかマジやめて
0070デフォルトの名無しさん
垢版 |
2017/11/30(木) 09:59:17.09ID:saSKapUF
釈尊はnullは「無」であると説かれた
ナムー
0071デフォルトの名無しさん
垢版 |
2017/11/30(木) 11:21:23.77ID:ptf/uzH7
例外が邪魔とかoutイラナイわめいてるのは大抵Dictonaryでしょ
連想配列は銀の弾丸ではない、期待しすぎ
0075デフォルトの名無しさん
垢版 |
2017/11/30(木) 12:25:17.12ID:EK0LYHwo
今はout引数で変数宣言できるようになったからかなりスマートになった
むしろタプルの必要性が疑問なくらい
TryGetXならnull問題もないし
0076デフォルトの名無しさん
垢版 |
2017/11/30(木) 12:26:38.17ID:rx1MFcR/
何が返されるか分かりにくいじゃん
タプルで返して分割代入すればいい
0078デフォルトの名無しさん
垢版 |
2017/11/30(木) 12:34:03.03ID:rx1MFcR/
そもそもタプルいらん
0080デフォルトの名無しさん
垢版 |
2017/11/30(木) 12:51:45.93ID:Puu3loId
outでもクラスでも構造体でもタプルでも好きなもの使えばいいよ
>>78
いらんというお前のレスがいらん
チラシに書いとけ
0084デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:04:29.34ID:rx1MFcR/
>>79
.NETライブラリでも使われてないしな
0085デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:15:30.72ID:RhI3AKYT
outって呼び出す時に一々変数を定義しなきゃいけないのが面倒
Tupleは戻り値が分かりづらいって欠点がある
どちらも一長一短だから好きな方を使えばいい

.NETライブラリが使ってないから使わないって思考停止すぎんだろ
0086デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:19:26.22ID:rx1MFcR/
公認じゃない感あるし.NETの関数とマッチしないからな
0090デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:26:30.06ID:rx1MFcR/
そうそう、クラスでやれってことな。
0092デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:39:45.69ID:rx1MFcR/
>>88>>91は連動してて同じになっとるわ。
0093デフォルトの名無しさん
垢版 |
2017/11/30(木) 13:42:28.63ID:OCgtcJe/
c#が気に入らなきゃMatzみたいにオレオレ言語作れよ
0094デフォルトの名無しさん
垢版 |
2017/11/30(木) 14:01:20.98ID:2bRo+qFI
時間帯によってgpuの色味をコントロールするソフトを作りたいです
具体的にはf.luxみたいなソフトを作りたいのですが、かんたんですか?C#でいいんです?
f.luxはガンマ?が高目に設定されるようで、余計眩しく感じたりします
0095デフォルトの名無しさん
垢版 |
2017/11/30(木) 14:06:23.80ID:rx1MFcR/
Windows10のナイトモードでいいよ。
0096デフォルトの名無しさん
垢版 |
2017/11/30(木) 14:08:43.36ID:2bRo+qFI
時間帯によって徐々に変わるようにしたいのですが
0098デフォルトの名無しさん
垢版 |
2017/11/30(木) 18:39:49.21ID:yjKo9V4L
>>94
たまに似たような人がいるけど仕様段階で先が見えないくらいならあきらめた方がいい
このスレは設計のアドバイスをする役割ではないから
0100デフォルトの名無しさん
垢版 |
2017/11/30(木) 19:06:36.32ID:YyeHHjlB
画面関係ってOSのAPIレベルで標準化されてるのかな。
Win10だとそれっぽい機能がついてるから存在するのかもしれんが、それ以前のOSには存在しない気が

そもそも、昔よくあったOOPの責務の仕分け問題じゃないけど、画面の調整機能って
本来はモニター側が担当すべき機能でPC側でやるのはいかにも筋悪だよねw
■ このスレッドは過去ログ倉庫に格納されています

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