ふらっと C#,C♯,C#(初心者用) Part128 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2017/05/02(火) 22:05:40.13ID:OPFlvhxj
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

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

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

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

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part127 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1489498042/

■関連スレ
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://echo.2ch.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: default:vvvvv:1000:512:----: EXT was configured
2017/05/14(日) 18:37:42.17ID:gsPHEnab
>>168
今時ググるぐらい中学生でもできるだろ
2017/05/14(日) 18:41:14.47ID:VOaapSFu
>>168
日本語読めないのなら初心者未満だな
お前はいちいち誰かに解説してもらったのか
2017/05/14(日) 18:45:25.68ID:3p+3tmMb
テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい

C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1492843013/

ググればいいというのは確かだが聞いたら荒らしとかないわ
2017/05/14(日) 19:01:05.15ID:Niyp1tN0
初心者を見つけたら急に強気になるやつ
2017/05/14(日) 19:04:12.94ID:m1coD/cI
個人レベルなら変数名、メソッド名に日本語使うのはおk
訳の分からない英語にするよりはいいんじゃないか?

ダメな例
void Convert_Data()

void Method_01(int i)
2017/05/14(日) 21:04:12.46ID:3fFVFQc0
うちのも変数メソッドは日本語にしたくなって来た
辞書引いたりググりながらやったりして調べてるけど後で見返すと読めないのがあったりして困るときあるし
2017/05/14(日) 21:30:38.16ID:8Y89/URi
VBA で将来自分が保守しないコードは日本語識別子にしてる
あとデータベースの表名とか列名も日本語だな
それ以外は習慣でまだ英字だな
2017/05/14(日) 23:48:21.63ID:nhCIier5
日本語は複数形がないのがな
2017/05/15(月) 00:06:55.65ID:rEp2NUpi
>>176
ああ、それはたまに思うね
2017/05/15(月) 00:13:11.99ID:WWr1mKyF
複数とか諸とか「たち」とかつければOK
まあ日本語なんてインテリセンス殺しの名前は俺は絶対使わないけどw
2017/05/15(月) 00:44:55.37ID:Fre6jJ42
質問です
ApplicationSettingsBase(を継承したクラス)において
applicationScopedSetting 属性をつけたプロパティのデータが保存されません。
(userScopedSetting のものは保存されます。)

applicationScopedSetting属性のものはどうやったら保存されるのでしょうか。
また、どのような使い道があるのでしょうか。

おねがいします
2017/05/15(月) 01:46:58.70ID:H6WdDjEY
設定プロバイダを自作しないと保存できないんだったか

使い道?アプリケーションで共有する読み取り専用の値を書くんだよ
DB接続文字列とか
181デフォルトの名無しさん
垢版 |
2017/05/15(月) 15:15:02.32ID:DW83hE61
お前らthisつける派?
2017/05/15(月) 15:45:00.88ID:uzaXOcwn
>>181
初心者の俺もそれ知りたい。
偉そうにしてる皆さん達による個々の信仰からのバトルを期待。
2017/05/15(月) 15:54:57.49ID:APQEqBwf
あえてthisを付けるのが正当化されるのは、引数やローカル変数の値を同じ名前
(またはキャメル形式かパスカル形式かだけが違う)のプロパティーやフィールドに
代入する時ぐらいかね。
2017/05/15(月) 16:29:55.58ID:zwx/TTMf
this や self だけじゃなく呼び出し側オブジェクトも
his とか her で参照できていたらパラダイム変わってたよね
2017/05/15(月) 16:55:55.59ID:a/4QJWcH
つける方が好きではあるんだけど、VSだかReSharperだかが消せって言ってくるのでそっちに合わさせたかなぁ
2017/05/15(月) 17:45:39.33ID:S+zSCdGp
メンバー変数を表す接頭辞付ける位なら、thisを付けるな。
187デフォルトの名無しさん
垢版 |
2017/05/15(月) 18:25:08.24ID:cef61/4v
C#で何つくれば一人前なん?
2017/05/15(月) 18:27:39.72ID:oiOdc9uz
>>187
d#
189デフォルトの名無しさん
垢版 |
2017/05/15(月) 19:14:36.37ID:7MwFbRFx
普段this付ないや規則があれば付けるけど
2017/05/15(月) 19:34:09.15ID:ufmd9LL8
結構なんでもthisつけてる
VSには消せっていわれるけど
2017/05/15(月) 19:42:05.75ID:1kHxYJuC
全部のメソッド呼び出しにthis付けているソース見たことあるわ
baseが見辛かったことだけ覚えている
2017/05/15(月) 19:57:23.39ID:oD/+uina
>>183 に一票
2017/05/15(月) 20:25:23.57ID:i6MkOOpj
>>190
に一票
2017/05/15(月) 20:29:21.58ID:DeqHpRpX
VSの初期設定がthisを消しているのでそれに倣ってるわ
2017/05/15(月) 20:31:14.94ID:LCesVlrN
>>194
初期設定でも場合によるだろ
2017/05/15(月) 20:58:22.16ID:MBLyoBiO
最近はインテリセンスも賢くなったからthisは消してる
昔はthis打った方が補完が安定した
197デフォルトの名無しさん
垢版 |
2017/05/15(月) 20:59:47.42ID:cef61/4v
入門書読んでるけど、キーワードが80個しか無いってホントなん?
コンテキスト キーワードのみって事なん?
2017/05/15(月) 21:02:57.01ID:wlL0huyV
>>197
https://docs.microsoft.com/ja-jp/dotnet/articles/csharp/language-reference/keywords/index
199デフォルトの名無しさん
垢版 |
2017/05/15(月) 21:18:38.92ID:QfNwrH5V
c#について質問です。
生成したファイルを実行時に呼び出したいんですが、
絶対パスで指定している場合、環境が代わってしまうと
パス変わってしまうので読み出せなくなってしまいます。
どの環境でも正しく読み出せるように
絶対パスではなく実行ファイルのディレクトリに
ビルド時に生成するものを作りたいんですが
どうすればよろしいでしょうか?

なんとなくリソースなどにファイルを追加設定すればいいのかと思ったのですが
実行してもどこにも生成されませんでした
VisualStudioの扱いに慣れてなくて申し訳ございませんが
そのあたりご存じの方いたら教えてください。
200デフォルトの名無しさん
垢版 |
2017/05/15(月) 21:27:26.62ID:cef61/4v
>>198
今見てるサイトで笑った
2017/05/15(月) 21:38:24.07ID:fLE+TSDI
>>199
色々やるなら Post Build のところにシェルスクリプト書いておく
単にファイルをコピーするならソリューションに追加して、
プロパティでコピーするよう設定する。

↓これのスコア49のとスコア12の回答を参照
http://stackoverflow.com/questions/747941/copying-files-into-the-application-folder-at-compile-time
2017/05/15(月) 23:59:09.51ID:MBLyoBiO
msbuildはタスク追加めんどくさいよね
Coreになった時にcsproj引き継がないでgradleライクなスクリプトに変えればよかったのに
2017/05/16(火) 00:50:21.88ID:VcPDtcgU
xmlはすべて追い出せ!
2017/05/16(火) 01:09:46.21ID:l59jFeCL
JSONよりはわかりやすいだろ
2017/05/16(火) 10:27:28.95ID:JvSvSRd1
Formアプリケーションを作成しているのですが
複数のクラスで発生したそれぞれのエラーをエラーが発生した時に
メッセージボックスに表示してかつログに書き込みたいですのですが
各クラスにはどういう実装をするのがいいのでしょうか
206デフォルトの名無しさん
垢版 |
2017/05/16(火) 10:49:45.75ID:z70mDz+n
C#
ボタン配置しても、ダブルクリックでコードが出ない
http://fast-uploader.com/file/7050419469159/

本当に困っているので、教えて頂けると助かります
207デフォルトの名無しさん
垢版 |
2017/05/16(火) 11:27:54.26ID:z70mDz+n
pyhonファイルも使えると聞いたのですが、やり方はどうすれば良いのでしょうか?
調べてもmacやubuntuしかでて来ませんでした。
OSはlinux mintです
208デフォルトの名無しさん
垢版 |
2017/05/16(火) 11:45:34.03ID:z70mDz+n
using System;
using System.Windows.Forms;

public Sample(a,b)
{
Console.Write(a);
MessageBox.Show(b);
}

Sanmple呼び出し
↑↑↑
を最後に埋め込み
209デフォルトの名無しさん
垢版 |
2017/05/16(火) 13:52:34.17ID:z70mDz+n
何とかなりませんかね?
210デフォルトの名無しさん
垢版 |
2017/05/16(火) 15:06:12.06ID:2YPoPkpm
先生、sqlbulkcopyでdatatableをDB(sqlserver)に入れたいのですが、datatable内の1カラムにgetdate()を設定することは可能でしょうか?
211デフォルトの名無しさん
垢版 |
2017/05/16(火) 15:09:53.48ID:z70mDz+n
はい、可能です
212デフォルトの名無しさん
垢版 |
2017/05/16(火) 15:13:05.65ID:2YPoPkpm
>>211
マジですか!調べてみても分からなかったので出来れば設定方法をご教授願います
2017/05/16(火) 15:29:06.61ID:gO5Fs5vN
>>211
お前いろんなスレで死ねって言われてるけどまだ死んでないの
雪風がどうたら
2017/05/16(火) 16:28:20.08ID:xTLK6q+8
>>205
nlogのようなロギングライブラリ使うのが一般的じゃないかな
概要や使い方はぐぐってね
2017/05/16(火) 18:47:27.26ID:/hvrKFRI
>>210
sqlserverならコピー先のテーブルの既定値にgetdate()設定しておけばいいんじゃないの
少なくともDataTableのExpressionじゃ目当ての処理はできないと思う
216雪風
垢版 |
2017/05/16(火) 19:14:17.44ID:z70mDz+n
死ねなんて、言われた事ないな
2017/05/16(火) 19:45:42.17ID:JgOfy+oS
>>205
エラーとはなんですか?
まずエラーとは何か定義しなければ話は進みませんよ
2017/05/16(火) 21:13:16.85ID:0XQXtOGz
例外と思っていいんじゃね多分
219デフォルトの名無しさん
垢版 |
2017/05/16(火) 21:36:37.56ID:fxDdBjd8
>>205です
>>208>>217>>218
ありがとうございます

イメージとしては、各クラスで起こった例外をcatchしたときコールバック出来るデリゲートを準備して、それぞれのクラスのコンストラクタにformで定義したメソッドを渡してやるといった感じなのですが、一般的にどういったやり方をするもんなのかと思いまして
MessageBox.Show()を実行させるので、エラー発生時の処理を全てform内に記述するのが普通なんですかね?
2017/05/16(火) 21:46:34.93ID:fjoeC8EN
>>219
クラスを同時実行しないのならForm内にエラー処理メソッド作って
・エラーが起きたときに各クラスからそのメソッドを呼び出す
・クラス終了時にエラーを示す返値を出してFormで判断する
普通とか存在しないからその他好きに作ればいいよ
クラス同時実行するのならちょっと面倒になるけど
MessageBox.Show()を使うよりFormにRichTextBoxかLabelで表示したほうが分かりやすいと思うけど
2017/05/16(火) 21:55:35.21ID:64KrDfHK
>>219
例外はなるべく呼び出し階層の上の方でキャッチするのが基本
フォームアプリならそれはすなわちイベントハンドラになる
ヘタに奥の方でキャッチして握り潰すよりずっといい
その代わり、どこで例外が発生して処理か打ち切られてもリソースのリークなどの問題が起きないように
常に例外安全なコーディングをすること
2017/05/16(火) 21:55:53.25ID:kR+Ii8XK
エラーを記録する事に情熱を燃やすよりもエラーを出さないコードを書く事に集中する方がいいと思う。
2017/05/16(火) 22:10:05.09ID:fxabLeuL
エラーを出さないようにするにはエラーを記録することが役に立つから情熱をかけてもいい
2017/05/16(火) 22:17:01.95ID:VGECTk9b
それを例外の握り潰しという
225デフォルトの名無しさん
垢版 |
2017/05/16(火) 22:22:33.82ID:Ag35s8j3
コンパイラをframeworkで標準装備って、ウイルス的に良くないと思うのだけど?
2017/05/16(火) 22:31:35.05ID:AGzM1pll
>>219
よく分からんけど、個々の例外ハンドラーでいちいちメッセージの表示とログの処理を書くのが面倒だってことなら
こんなのはどうかね。
もちろん、まったく一般的でも何でもないはずだけどw


(1) すでに適切に処理された例外を表すHandledExceptionを定義

(2) 個々の例外ハンドラーではキャッチした例外をHandledExceptionのInnerExceptionに
入れてHandledExceptionをスロー

(3) 集約例外ハンドラーを使ってHandledExceptionのInnerExceptionを使って
メッセージの表示とログを行う

集約例外ハンドラーって俺はあんまり使ったことないけどこういうやつ
http://www.atmarkit.co.jp/ait/articles/0507/01/news134.html
2017/05/16(火) 22:35:00.50ID:AGzM1pll
だだこんな作り方されると後で他で再利用しずらいねw
2017/05/16(火) 22:37:25.86ID:zhIbn0v9
エラー処理は置いといて、
自分はログや経過表示にはログクラスを作って各クラスにインスタンスを渡してるな
2017/05/16(火) 22:41:10.27ID:VGECTk9b
例外はキャッチされようがされまいがメソッドを抜けた時点で必ず後片付けが完了しているのが正しい
極端な話、全部UnhandledExceptionで処理しても問題ないはず
230デフォルトの名無しさん
垢版 |
2017/05/16(火) 22:54:27.55ID:4vSkrFsf
下のコードで、var fuga からインデックス等で最初の要素を指定して
データを取得したいのですが、どのように書けば行けるでしょうか?

class Hoge
{
public int hoge { get; set; }
}

static void Main(string[] args)
{
List<Hoge> hogehoge = new List<Hoge>();
hogehoge.Add(new Hoge { hoge = 1 });
var fuga = hogehoge.Where(e => e.hoge==1);
int hogege = fuga[0].hoge; //インデックス等で最初の要素だけ取得したい
}
2017/05/16(火) 22:56:54.77ID:0Zcpca0B
fuga.ToArray()[0] or fuga.ToList()[0]
232デフォルトの名無しさん
垢版 |
2017/05/16(火) 23:02:22.98ID:iUpJkWmO
>>205です
皆さんありがとうございます
すごく参考になるレス頂けてとても助かりました
指摘頂いたことを参考に頑張ってみます
またわからないことあったら質問させてください
2017/05/16(火) 23:12:13.60ID:5HaY8++G
>>230
インデックスで任意の要素を、ではなく、最初の要素固定なら
fuga.First()
でもいける
2017/05/16(火) 23:15:05.18ID:5HaY8++G
Skip()使えば途中の要素もいけるか
235230
垢版 |
2017/05/17(水) 00:17:28.91ID:F4n193dh
fuga.First()がまさに求めていたものでした
fuga.ToList()というやり方も、非常に参考になります。

ありがとうございました。
2017/05/17(水) 01:29:46.60ID:4KwX7I2m
>>235
fuga.ToList()の方は一旦条件に該当するもの全部の配列を作るから、First()を使うのと比べて無駄がある。
さらに言うなら、この場合はWhere()も必要無くて、hogehoge.First( e => e.hoge ==1 )で良い。
237デフォルトの名無しさん
垢版 |
2017/05/17(水) 08:36:02.32ID:oIZq9+Td
>>215
ありがとうございます。
私もその結論に至りました。
238デフォルトの名無しさん
垢版 |
2017/05/18(木) 04:30:00.50ID:plBfXEwH
.netとapi絡みですがいいですか?
GetPrivateProfileStringですがどうやっても30000文字くらいまでしか読めません…
2000以降のOSだと読み込みの文字数制限無いって書いてるのに… なんででしょうか?
ちなみにC++から普通に全然読み込めました。
2017/05/18(木) 04:31:21.77ID:plBfXEwH
宣言はこんなかんじです。
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,
string key, string def, StringBuilder retString,
int size, string path);
2017/05/18(木) 05:04:07.60ID:QqtQwXyU
実際にはGetPrivateProfileStringAが呼び出されてるとか
2017/05/18(木) 05:13:30.48ID:plBfXEwH
>>240
仮にそうだとして回避する事って出来るんですかね?
2017/05/18(木) 05:20:15.27ID:plBfXEwH
こうやってみたけどダメでした… 無理かな…
[DllImport("Kernel32.dll", CharSet=CharSet.Unicode, EntryPoint="GetPrivateProfileStringW")]
2017/05/18(木) 05:51:43.24ID:3q2usjgF
無理かどうか以前にGetPrivateProfileStringで30000文字読み込むなんていう仕様がおかしい気が・・・
2017/05/18(木) 05:53:36.76ID:plBfXEwH
>>243
マニュアルには2000以降は制限なしって書いてるのに制限かかるのが不可解で…
2017/05/18(木) 06:21:12.42ID:3q2usjgF
どこにそう書いてあるのか知らないけど自分の環境で試してみたら60000文字以上でも読めたよ
2017/05/18(木) 06:22:38.85ID:plBfXEwH
>>245
え〜そのコードおしえてください!
2017/05/18(木) 06:37:59.18ID:3q2usjgF
sizeにバイト数ではなく文字数を渡しているとか?
2017/05/18(木) 06:49:20.83ID:plBfXEwH
>>247
それでした…orz
半日悩んだ結果がこれ…orz
2017/05/18(木) 06:56:20.37ID:plBfXEwH
>>247
いやそういう事でもやっぱないような…
これでいいんですよね??
StringBuilder temp = new StringBuilder(99999999);
GetPrivateProfileString(Section, Key, "", temp, 99999999, path);
2017/05/18(木) 07:15:48.86ID:3q2usjgF
バッファの終端はNULL文字になるからそれだと99999998バイトまでしか読めないみたいよ
MSDNにその辺りのことが書いてある
99999999が仕様なら仕方ないけど、そうでないなら長さはちゃんと決めないとトラブルの元になるよ
2017/05/18(木) 07:26:40.34ID:plBfXEwH
>>250
というかよくわからないのが
WritePrivateProfileString()は最初の一回は30000文字以上でも書き込めるけど
2回目に試しに上書きしてみようとしてもうまくできないんですよね…
""空文字を設定してもダメみたいで…
一旦30000文字以上を書き込むと上書きも出来なくなります。
これReadPrivateProfileString()が読み込めないのと何か関係してるのかな…
意味が分からない…
2017/05/18(木) 07:39:10.95ID:3q2usjgF
フラッシュしても駄目?
2017/05/18(木) 07:39:21.49ID:bq0WS2qT
INIファイルはWin16の頃の遺物だからそんなでかい文字列を扱ってトラブルになるのも仕方ないと思う
ってかMSDN見ても30000文字以上扱えるという記述ないけど
2017/05/18(木) 08:00:42.55ID:plBfXEwH
>>252-253
https://msdn.microsoft.com/ja-jp/library/cc429770.aspx

これと勘違いしてた…
でもこれがいけるならGetPrivateProfileStringもいけないの?
2017/05/18(木) 08:26:32.47ID:plBfXEwH
>>253
今VC++からも読み込んでみたんですがどうやら勘違いでした。
31487文字までしかどうやっても読み込めませんでした。
GetPrivateProfileString()自体にやっぱ制限があるようです。
2017/05/18(木) 08:27:25.66ID:Za5q7uI4
なんでそんな限界に挑戦したいの?
どんな環境でも動くようにしたくないのか?
2017/05/18(木) 08:43:47.28ID:0yP1j9dj
iniファイル使わざるを得ない事情があるんだろうけどそれならAPIより.NETライブラリ探したほうがいいんじゃないの
2017/05/18(木) 08:48:31.58ID:plBfXEwH
>>256
古いアプリのファイルを読み込みたくて
>>257
何かよいソースないかさがしてみます。
最悪自力で読み込もうと思います。
2017/05/18(木) 09:01:56.00ID:bq0WS2qT
>>258
ソースから探さなくてもnugetでiniパーサー見つかるでしょ
2017/05/18(木) 10:22:47.93ID:bBEBMsWX
iniファイルなんて自分で読み書き出来るだろ
2017/05/18(木) 10:29:06.99ID:plBfXEwH
>>259
なるほど。
>>260
そうですよね。
2017/05/18(木) 18:13:55.78ID:kDiQJ8Uz
ビットフィールドないのけ?
あと固定長も

unsafeなんか入れたくないけど結構使うもん?
gchandleとmarshalでsafeにやった方がいいのかunsafe使いまくっても全然問題ないのか
みなさんの方針を教えてください
2017/05/18(木) 18:17:39.04ID:OCXcI4ec
>>262
32ビット固定とかなら好きに使えよ
marshalはよく使うがunsafe使う必要に迫られたことないな
2017/05/18(木) 19:01:17.54ID:nGaj6J50
>>262
BufferでもBitArrayでもBitVector32でも好きに使えや
2017/05/18(木) 19:28:28.05ID:POnkIYdd
クロージャだの非同期タスクだの高レベルなことは各言語記述性高まってるけど、
エンディアン指定してビット長さ指定してビットフィールドとか
そういう低レベルなことを簡単に記述できる方向の進歩って少ないよね…

30年前と同じにシフトしてマスクして足すという
2017/05/18(木) 20:08:12.45ID:Zif2rhHO
>>255
Windows NT 4 の頃に WritePrivateProfileString( ) をガンガン使ってたらたまに戻ってこないことがあったので、マイクロソフトにインシデント使って問い合わせたらすったもんだの末に「仕様です」って言われた w
もうその頃から捨てたがってるのがありありだったわ
2017/05/18(木) 20:26:56.52ID:kDiQJ8Uz
>>263-4
32ビット境界になってればいいけど…
そこまでまだ見てないけど多分なってないんだよなぁ
取り敢えずその辺当たってみるわありがとさん!
2017/05/18(木) 21:23:53.78ID:bBEBMsWX
>>266
ガンガンって一秒当たり1000回くらいコールしたの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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