ふらっと C#,C♯,C#(初心者用) Part128 [無断転載禁止]©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
「どんなにくだらない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 >>1おつ
そういえば、変数名にvarは使えるんだよな
int var = 0;
みたいなコードを見てギョッとしたおもひで responses.Where(i => i == 1).Select(x => "乙"); varがダメって人は変数名に型名つけたりするんかな
string hogeStr=getHogeMoji(); var使うなもハンガリアンも同じ(間違った)問題意識ではあるね Linq使うなラムダ使うなvar使うな保守できない読めないって自分がバカなのをまず自覚してほしい >>5
逆だろ
そんなの付けたくないのでしっかり型を明記して欲しい >>8
俺からするとわざわざ読めない人増やして何がやりたいのかな?って思う >>10
俺からするとその程度で読めなくなるようなカスを集めて何がやりたいのかな?って思う >>9
型明記しなきゃわからないなら
画面内に型が表示されていないとわからないレベルでしょ? int x = hoge?.Value ?? -1;
これ一般的だよね? 普通 var x = hoge.Value ?? -1; 他人(MS)が作った言語に文句ばかり垂れてるヘタレ底辺
嫌なら自分で好みの言語作ればいいのに >>17
hogeがnullだとぬるぽだから16が正解 >>18
そういうの滲み出てるからc#で作れるものって少ないじゃん
windowsアプリとゲームぐらいじゃないの?
ストアアプリも失敗
silverlightも失敗
WPFも失敗
Azureも失敗
c#で作れるものってWindowsFormとゲームしか残ってないよな? >>20
ゲーム作れれば十分だと思うがOSとかドライバ作れないとだめなのか >>17
こういう「リファクタリング」する人よくいるわ
なぜそう書かれているのかをあまり考えず簡略化してしまって結果動作が変わる >>16
まあ一般的になってきたかな
var x = hoge?.Value ?? -1; >>24
-1が何を指してるかわからないマジックナンバーだから本来は許されないが
MSも同じことをやってる
これは完全に悪習
たちが悪いやつになると-1を前提にして計算してぱっと見何をやってるかわからなくなってる
cのころifの判定に数式を入れて分岐してたのと同じぐらいの害悪
c#はifの判定結果がboolじゃないとコンパイラエラー
bool?もダメ nullをわざわざはじいておきながら-1というマジックナンバーを導入している
変な風習
将来はなくすべき 仮に
var x = hoge?.Value ?? -1;
として-1が返ってきたとしてそれをそのまま使うのか?
そのあとif(x==-1)するなら最初からvar x = hoge?.Value ?? -1;なんてしないで
if(hoge==null)したほうがいい ワッチョイが消えたせいで ID:PAB4dkAH みたいなヤツをNGに登録するのが面倒になったな 理解できないならいいよ
おまけ
pythonとかじゃ配列にマイナス添え字が使えるので
indexの見つからない結果に-1は不適切 理解できるできないの問題じゃねーよ
ここは「初心者用」なんだよスレチ野郎はさっさと消えろ 初心者の皆様へ
意味を持たない自分が勝手に決めた俺俺数字 -1は使わないようにしようね
こういうのはマジックナンバーと言って使うなとそのうち教わります 初心者はまず使わないし式の意味わからないだろうから心配いらんと思うが var x = hoge?.Value ?? -1;が一般的とか使われるようになってきたとか
初心者に間違った知識を植え付けないほうがいいでは? 俺のことはC#でググれとか言ってる岩永氏も同じレベルなんだからしょうがないわな・・・ まさか真面目に言ってるとは思わなかったw
var x = hoge?.Value ?? -1;
この-1がマジックナンバーかどうかはケースバイケース。
変数名がちゃんとしていて意図が読み取れれば-1の意味は自明な場合もある。
しかし、ID:PAB4dkAHみたいなのが職場におったらやりづらいねw 全体の意図把握せずに一行だけ見て「初心者はこれをやってはいけない」
とか職場で言っていたら無能どころかキチガイ どんな道具も使い方次第で凶器にもなりうるわけで、
極端な話、こういう構文だから、こういう書き方だから一律にわかりづらいなんてことはなく、
すべてがケースバーケースなんだけど、そういう実質を自分の頭で判断する能力がない人が
羹に懲りてなますを吹いちゃうと、こういう形式にこだわるセキセントリックな奴になっちゃうんだろうね >>30
サンプルと言うことが理解できないバカ w 言語の新機能が設計から実装に落とし込むための機能じゃなくて
厨房の工作レベルの計画性しかなくて呆れる
ラムダ式、var、linqとか
この設計を実現するために、この言語にはこの表現が必要なんだ!
って代物か?
なんか開発経験の浅い素人がちょっと変わった表現入れて見ましたレベルのゴミじゃね?
って言うのはさ、想定する理想の設計書が言語から見えない
こんなの続けてたら早めに終わるよ >>27
バカの>>17がバカを指摘されて発狂したんだろ 夕食
はい、無職いがい言えました
少ない情報でそんな結論に到達する
お前の頭のほうが可哀想だろ? まずC#書いてから参戦!してくれよな〜たのむよ〜前スレ514さんよ〜 >>51
あれ結局XmlNodeListだとvarで表示されないって話だった 夕食?
本人は面白いんだろうな...
こんな少ない情報で語彙のレベルがわかるのも珍しい w var使うためにはvarのためにコードを記述しないと動かない
var出ないコードで動いてもvarで動くとは限らない
のでますます使いたくない >>57
XmlNodeListをforeachでvarが使えるように改造してみればわかるって ジェネリックの話は恥かくだけなんだからやめればいいのに >>52
それじゃなくて
>> 514
> カーソル当てて見れるのって実行中だけじゃねっけ?
でしょ
まあデータヒントと勘違いしたんだろうけど恥ずかしいのには変わりないわな >>60
でも実行中しか見れないのもあった気がするから
今度メモっとくよ
そのおかげでいちいち実行して型調べてってやってた記憶がある >>58
varが使えないのは型変換やキャストが伴うときだけのはず
キャストならもちろん実行例外になる可能性もある
「varでないコードで動いてもvarで動かない」時は型変換伴う特殊なコードを記述してる時だから、それを気付けるのはむしろメリット
そもそも、今XDocumemtじゃなくてXmlDocumentを使う必要って何かあるんだっけ? 実のない議論がよっぽど好きなんだろうな
「絶対使え」VS「絶対使うな」になっている人もいるみたいだし
こんな連中が仕事でやっているとか信じられなーいw 議論はこっちへ行ったほうがいいでは?
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1492843013/ <MouseBinding Gesture="LeftClick" Command="{Binding PlayCommand}" CommandParameter="{Binding ElementName=mediaElement}"/>
ViewModelでmediaElement.Play()
とやっているんですが、ViewModelで直接GUIを操作するのは良くないですか? >>74
いいんじゃねぇの
どうせVisibilityとかBrushとかVMに持ってるんだろ?
それらと同列だよMediaElementだって。
完全に分離するならVMでSystem.Windowsをusingした時点で負け 実はIValueConverterインターフェイスの指定がなかったオチだったりしてな >>75
PointとかRectぐらいVMで使ってもいいじゃん… randomって今時デフォシード秒単位なのかよ
毎回インスタンス作ってたウンコプログラムで同じのがで続けて困ってたw
まぁバグを分かりやすくしてんのかな? C#でOleDbConnection使わずにmdbファイルにアクセスする方法ってありますか? 作った方はもう居ないんですがOleDbConnectionでConnectメソッドを呼び出しているわけではないんです
なのにmdbファイルから読んでいるみたいなのです。変数の定義元に行っても以下のように書いてあり、拡張子は.csではないです
hogehoge {
}
これってどうやってmdbファイルにアクセスしているんでしょうか?エスパーになりますがよろしくお願いします 1.OleDbConnectionクラスなの?派生なの?
2.それはOpenメソッドを呼び出しいるの?
3.mdbファイル名がプロジェクトの定数に設定されてない?
4.変数の定義元のファイル拡張子ってなに?
どーせDSN接続とか、接続文字列リソース内にありましたとかじゃねーの 拡張子はxsdでした
3みたいに定義はされていましたが何なのかわかりません 初心者質問で申し訳ないのですが
form1が親フォーム、form2が子フォームの時
form1にform1のコントロールを操作する関数があり、form2からその関数を実行するには、form2のコンストラクタにform1のオブジェクト(f1)を渡せばf1.hohe()のように実行出来るのでしょうか
適切な方法がいまいちわかりません。どなたかご教授頂けると助かります >>90
コントロールを操作するメソッドをpublicかinternalにしておく
そのうえでForm1のメソッドに繋げる
http://tukaenai-pg.cocolog-nifty.com/blog/2006/05/c__2de6.html
これはコントロールの値の参照の場合
メソッドを使う場合は.textBox1.Text;の部分を差し替えればいい >>90
確かにForm1のメソッドをpublicかinternalで公開して、Form2がForm1のインスタンスを
何らかの方法で持てば実現できるけど、あくまで一般論で言えばFormのメソッドを
外部に公開するのは不適切な場合が多いと思うよ
普通は、
Form1からモデルMのメソッドを呼び出す
↓
Mが何らかのイベント発生
↓
Form2はMのイベントを受信して何か処理をする
こんな流れじゃないの? >>91>>93
ありがとうございます
>>91で紹介された方法で実行しようと考えてたのですが、>>93の指摘からform2にイベントハンドラを追加してコールバックイベントで実行するのが良さそうですね
再度検討してみます >>93
Form1からモデルMのメソッドを呼び出す
↓
Mが何らかのイベント発生
↓
Form2はMのイベントを受信して何か処理をする
↓
Form2がなんらかのイベント発生
↓
Mがイベントを受信してイベント発生
↓
Form1がMのイベントを受信してコントロールを操作する
アホみたいな設計だな なんかもっとイケてる方法ないの?
その方法カッコよくないよね >>90
普通に
form2.form1Action+=()=>{form1.checkBox1.Checked=true;};
でいい form2はform1のコントロールの一つであるという考え方でいい まあ、どうしてVとMを分離するのか理解してないとそういう発想になるね
なんでそんな回りくどいことをする必要があるんだ!って(笑)
そういうのは部分最適って言うんだけどさ 場合によるでしょ
社員のセクハラが発覚したら人事から懲戒処分が出るみたいな処理を>>98みたいな実装するのは最悪だけど、
ビューに閉じた処理なら別にいい あんまり思いつかないけど、そういうケースもないことはないかもね。 そもそも画面を2つも3つも作る設計が駄目
って中々言いにくいんだよな
メインの画面遷移とウインドウは有っても確認ダイアログ程度ってのが使いやすいんだが 大事だけど、こだわりすぎると馬鹿の一つ覚えって言われるだろうね すべてをあてはめることが正とまでは思わんが過去に生まれて今まで生きてる考えは大切にしたい
あと意志疎通するときに共通言語があるとやりやすいってのもある Formアプリケーションのdatagridviewなんですが
プロパティである列だけボタンセルにしたとき、初期処理で空の100行を作るとボタンにした列に全てボタンが並びます
これを最初の列に値が入ってるところだけ、ボタン表示させることって出来るでしょうか?
例えば100行のうち最初の10行だけセルに値が入り、ボタンも10行目までしか表示されないといった感じです >>98
ありがとうございます
指導頂いた方法でも試してみます リークする可能性がない場合でもイベントにラムダ式を登録するのは
なんか嫌だね。
これはvar使うなみたいな教条主義じゃなくて、実際問題
コードの見通しを悪くするだけの場合の方が多いと思う。 直前にイベントにラムダ式食わせるコードが出てきてるのにアホか >>105
だいたいこんなんある、とだけ知っておいて必要時に調べる程度でいいと思う
無理になんかのパターンに当てはめようとしてクラス図書きました
結果いろいろマズくてAdapterで接ぎました
とか笑い話にもならん 横レスだが、>>110の直前、>>109でお礼言ってる先(>>98)に件のコードあるけど。。。 https://msdn.microsoft.com/ja-jp/library/system.collections.ienumerator(v=vs.110).aspx
このスクリプトの、Peopleクラスのprivate Person[] _people;に
Personクラスのインスタンスを3つ代入した後の動作が全くわかりません。
どのタイミングでGetEnumerator()が呼び出されるんでしょうか?
GetEnumerator()が呼び出されたとしても、public Person[] _people;に値が代入されてから
IEnumeratorの実装メソッドがどこで呼び出され、どのように互いに影響してるのかわかりません。
どなたか教えていただけますでしょうか? >>119
foreach文はGetEnumeratorやIEnumeratorの実装メソッドの呼び出しに展開されるので、そこで呼び出されてる
どう展開されるかはググれば出るだろうから調べてみて >>119
まずforeachはpeople.GetEnumerator()を実行して
IEnumeratorを取得します
あとはそれを使って反復処理を実行します
PeopleクラスはPeopleEnumというEnumeratorを使っていますよと示しているだけ >>120>>121
GetEnumeratorの呼び出しのタイミングが解かったら、IEnumeratorの処理もなんとなく理解できました。
ありがとうございました。 SQL Server 2012にあるデータ(ビュー)を取得し、それを条件で絞ったあとDataGridViewで表示させたいのですが自分の知識不足かうまくできません
DataGridViewのDataSourceプロパティにDataSetを指定するのが一番簡単なのかと思うのですが、クエリを動的に指定できず・・・挫折しました 途中で書き込んでしまいました
どうすればもっと簡単にできるでしょうか? DataSourceにできるかどうかしらんが
DataView使う
LINQ(to DataSet)でデータセットいじる
DataSetやめてEFつかう
お好きな方法でどうぞ 無理せずAccess使えばいいのに
遥かに簡単にまともなものができるよ >>123
DapperとLinqを使った方が簡単だよ
DataSetは精神鍛錬のための苦行以外では使い道がない Dapper+SQLiteのお手軽感
EFもSQL Serverも二度と使いたくない タスクバー常駐型のアプリを作ってます。
起動時に確保したヒープを起動中は保持し続けてるのですが、
この領域が長期間運用中もビット化け等を起こしていないかチェックするには
どのような方法があるでしょうか?
またECCメモリだとビット化けの心配は無いのでしょうか? CRCとか?
2倍の領域を確保してミラーリングみたいにするとか?
どっちにしろC#向きじゃないような気が... >>129
ECCメモリーは、訂正可能なエラーは文字通り訂正されるから、化ける確率はずっと低くなるけど、
稀に訂正不可能なエラーが発生する場合もあるから、全く化けないわけじゃない。 C#でDictionary構造を保持しています。
Dictionaryに格納しているデータは任意のタイミングで変更されます(頻繁ではない)。
データに変化があるたびにDictionaryをバイト配列に変換してサムを算出し、
定期的にチェックサムするっていう方式はビット化けに対して有効でしょうか? >>132
誰がDictionaryにアクセスすんの?
bit化けはマジで起こってるの? >>132
メモリが勝手に化けることを想定したらプログラミングは全く成り立たないので無視
ユーザーコードからの普通の書き込みについては、Dictionaryを直接晒さずに特定のメソッド経由で書き換えさせるようにすれば確実にフックできる >>132
こういうレイヤを分けて考えられない奴っているよな
特にインフラ系から来た奴にありがち
「変数が多いなら抽象化しろ」という考え方が理解できず、
if一行足せば済む問題を必死でネットワークの設定弄り続けて回避しようとする >>135
前半はわかるけど後半は何を言ってるのかさっぱりわからん みんなー
Fluent Design Systemってどう思う? >>138
nugetでサンプル例を公開みたいな流れで、プロジェクトをダウンロードしても内容が訳ワカメなんだろうね。
( ノД`)… >>140
動画出ているけど、メトロ3Dって印象だな 文化の違いがどうしようもない
日本人は縦横の線が入った表に慣れてる
アメリカ人は線がない方が好み ラテン系の書体はベースラインがきっちり出るから線いらんのよね >>143
WPFのListViewにデフォルトで罫線が無いのがその理由とかまさかないよな・・・ そもそもWPFは論理的レイアウトに隅々まで拘った極めて欧米的な設計思想で作られていて、
Excel方眼紙を愛する未開の列島民族が手を出しちゃいけない代物だよ 確かに国産のアプリってUIのレイアウトがしっちゃかめっちゃかだよな
画面だけ見てもモデルがパッと頭に浮かばない
これじゃユーザーも自分は今何を操作しようとしてこの画面を開いてるんだろうって混乱すると思うのだが
そういうこと考えないのかね日本人って レイアウトとかユーザービリティーに無頓着なのは
どちらかと言えば欧米人の方だと思うけどね。
っていうか、欧米はガイドラインやコンセプトの設計者は優秀なんだろうけど、
現場の下っ端がアホなんだろうね。 >>137
winform以外使わないのでギルティ 日本人は、ってわけでもないと思うんだけど、現場に近い人間ほど、枝葉末節まで詳細に決めたがる(決めさせたがる)くせに、UX基礎知識が無くてオレオレルールを押し付ける傾向にある気がする。
だから、何でも出来るポテンシャルはあるんだけど、やり方が全く理解できずに、結局何にも使えないガラクタが多い感がある。
使用者に勤勉を求めるUIは悪だよな。 デザインはわからんなぁ
一点透視図で矛盾なく並べたところで「だっせぇ」って言われたら終わりだしね デザインはともかく使い勝手が悪い
無駄な入力項目多すぎ 「見栄え」って意味のデザインは、ぶっちゃけどうでもいいと思ってる。
それは主観評価だからねー。
愛着には関係するけど、使い易さへの影響度はほとんど無いと思う事ね。
入力項目多すぎとか、あるあるだよね。 未だにウィンドウサイズ固定のウェブサイトを発注する顧客 ゲームやドロー系除いてタブ移動やフォーカス管理がちゃんと考慮されてればデザインなんて気にしないよ
今はOS自体がそういった基本UI変えてくる糞になってるけど モデルオブジェクトを取得して
新しい内部状態を入力して
送信して保存する
こういうUIは使いにくい
モデルオブジェクトを取得して
メソッド引数を入力して
送信してメソッドを呼び出して保存する
こういうUIは使いやすい > クラスに直接メソッド書くなボケ
えっ、普通そうするやん
って思ったら直接文を書いてたのか w
確かに想像以上だわ 関数名とか日本語ですけどダメですかね?
なでしこ言語から入ったので、まぁいっかな、とか思ってます。 >>164
もう消えてるじゃねーか。まあ相当だめなんだろ、リーダブルコードでも読め レビュアーの評判を見るに関数名が日本語とかいう問題ではなさそうだ 変数名だろうがメソッド名だろうが日本語にしても問題ないからな
もしIDEにエラー表示出ているのなら、ここで聞くのは荒らしレベル >>167
>>1
初心者がIDEのエラーメッセージを読めると思うか? >>168
日本語読めないのなら初心者未満だな
お前はいちいち誰かに解説してもらったのか テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1492843013/
ググればいいというのは確かだが聞いたら荒らしとかないわ 個人レベルなら変数名、メソッド名に日本語使うのはおk
訳の分からない英語にするよりはいいんじゃないか?
ダメな例
void Convert_Data()
void Method_01(int i) うちのも変数メソッドは日本語にしたくなって来た
辞書引いたりググりながらやったりして調べてるけど後で見返すと読めないのがあったりして困るときあるし VBA で将来自分が保守しないコードは日本語識別子にしてる
あとデータベースの表名とか列名も日本語だな
それ以外は習慣でまだ英字だな 複数とか諸とか「たち」とかつければOK
まあ日本語なんてインテリセンス殺しの名前は俺は絶対使わないけどw 質問です
ApplicationSettingsBase(を継承したクラス)において
applicationScopedSetting 属性をつけたプロパティのデータが保存されません。
(userScopedSetting のものは保存されます。)
applicationScopedSetting属性のものはどうやったら保存されるのでしょうか。
また、どのような使い道があるのでしょうか。
おねがいします 設定プロバイダを自作しないと保存できないんだったか
使い道?アプリケーションで共有する読み取り専用の値を書くんだよ
DB接続文字列とか >>181
初心者の俺もそれ知りたい。
偉そうにしてる皆さん達による個々の信仰からのバトルを期待。 あえてthisを付けるのが正当化されるのは、引数やローカル変数の値を同じ名前
(またはキャメル形式かパスカル形式かだけが違う)のプロパティーやフィールドに
代入する時ぐらいかね。 this や self だけじゃなく呼び出し側オブジェクトも
his とか her で参照できていたらパラダイム変わってたよね つける方が好きではあるんだけど、VSだかReSharperだかが消せって言ってくるのでそっちに合わさせたかなぁ メンバー変数を表す接頭辞付ける位なら、thisを付けるな。 結構なんでもthisつけてる
VSには消せっていわれるけど 全部のメソッド呼び出しにthis付けているソース見たことあるわ
baseが見辛かったことだけ覚えている VSの初期設定がthisを消しているのでそれに倣ってるわ 最近はインテリセンスも賢くなったからthisは消してる
昔はthis打った方が補完が安定した 入門書読んでるけど、キーワードが80個しか無いってホントなん?
コンテキスト キーワードのみって事なん? c#について質問です。
生成したファイルを実行時に呼び出したいんですが、
絶対パスで指定している場合、環境が代わってしまうと
パス変わってしまうので読み出せなくなってしまいます。
どの環境でも正しく読み出せるように
絶対パスではなく実行ファイルのディレクトリに
ビルド時に生成するものを作りたいんですが
どうすればよろしいでしょうか?
なんとなくリソースなどにファイルを追加設定すればいいのかと思ったのですが
実行してもどこにも生成されませんでした
VisualStudioの扱いに慣れてなくて申し訳ございませんが
そのあたりご存じの方いたら教えてください。 >>199
色々やるなら Post Build のところにシェルスクリプト書いておく
単にファイルをコピーするならソリューションに追加して、
プロパティでコピーするよう設定する。
↓これのスコア49のとスコア12の回答を参照
http://stackoverflow.com/questions/747941/copying-files-into-the-application-folder-at-compile-time msbuildはタスク追加めんどくさいよね
Coreになった時にcsproj引き継がないでgradleライクなスクリプトに変えればよかったのに Formアプリケーションを作成しているのですが
複数のクラスで発生したそれぞれのエラーをエラーが発生した時に
メッセージボックスに表示してかつログに書き込みたいですのですが
各クラスにはどういう実装をするのがいいのでしょうか C#
ボタン配置しても、ダブルクリックでコードが出ない
http://fast-uploader.com/file/7050419469159/
本当に困っているので、教えて頂けると助かります pyhonファイルも使えると聞いたのですが、やり方はどうすれば良いのでしょうか?
調べてもmacやubuntuしかでて来ませんでした。
OSはlinux mintです using System;
using System.Windows.Forms;
public Sample(a,b)
{
Console.Write(a);
MessageBox.Show(b);
}
Sanmple呼び出し
↑↑↑
を最後に埋め込み 先生、sqlbulkcopyでdatatableをDB(sqlserver)に入れたいのですが、datatable内の1カラムにgetdate()を設定することは可能でしょうか? >>211
マジですか!調べてみても分からなかったので出来れば設定方法をご教授願います >>211
お前いろんなスレで死ねって言われてるけどまだ死んでないの
雪風がどうたら >>205
nlogのようなロギングライブラリ使うのが一般的じゃないかな
概要や使い方はぐぐってね >>210
sqlserverならコピー先のテーブルの既定値にgetdate()設定しておけばいいんじゃないの
少なくともDataTableのExpressionじゃ目当ての処理はできないと思う >>205
エラーとはなんですか?
まずエラーとは何か定義しなければ話は進みませんよ >>205です
>>208>>217>>218
ありがとうございます
イメージとしては、各クラスで起こった例外をcatchしたときコールバック出来るデリゲートを準備して、それぞれのクラスのコンストラクタにformで定義したメソッドを渡してやるといった感じなのですが、一般的にどういったやり方をするもんなのかと思いまして
MessageBox.Show()を実行させるので、エラー発生時の処理を全てform内に記述するのが普通なんですかね? >>219
クラスを同時実行しないのならForm内にエラー処理メソッド作って
・エラーが起きたときに各クラスからそのメソッドを呼び出す
・クラス終了時にエラーを示す返値を出してFormで判断する
普通とか存在しないからその他好きに作ればいいよ
クラス同時実行するのならちょっと面倒になるけど
MessageBox.Show()を使うよりFormにRichTextBoxかLabelで表示したほうが分かりやすいと思うけど >>219
例外はなるべく呼び出し階層の上の方でキャッチするのが基本
フォームアプリならそれはすなわちイベントハンドラになる
ヘタに奥の方でキャッチして握り潰すよりずっといい
その代わり、どこで例外が発生して処理か打ち切られてもリソースのリークなどの問題が起きないように
常に例外安全なコーディングをすること エラーを記録する事に情熱を燃やすよりもエラーを出さないコードを書く事に集中する方がいいと思う。 エラーを出さないようにするにはエラーを記録することが役に立つから情熱をかけてもいい コンパイラをframeworkで標準装備って、ウイルス的に良くないと思うのだけど? >>219
よく分からんけど、個々の例外ハンドラーでいちいちメッセージの表示とログの処理を書くのが面倒だってことなら
こんなのはどうかね。
もちろん、まったく一般的でも何でもないはずだけどw
(1) すでに適切に処理された例外を表すHandledExceptionを定義
(2) 個々の例外ハンドラーではキャッチした例外をHandledExceptionのInnerExceptionに
入れてHandledExceptionをスロー
(3) 集約例外ハンドラーを使ってHandledExceptionのInnerExceptionを使って
メッセージの表示とログを行う
集約例外ハンドラーって俺はあんまり使ったことないけどこういうやつ
http://www.atmarkit.co.jp/ait/articles/0507/01/news134.html だだこんな作り方されると後で他で再利用しずらいねw エラー処理は置いといて、
自分はログや経過表示にはログクラスを作って各クラスにインスタンスを渡してるな 例外はキャッチされようがされまいがメソッドを抜けた時点で必ず後片付けが完了しているのが正しい
極端な話、全部UnhandledExceptionで処理しても問題ないはず 下のコードで、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; //インデックス等で最初の要素だけ取得したい
} fuga.ToArray()[0] or fuga.ToList()[0] >>205です
皆さんありがとうございます
すごく参考になるレス頂けてとても助かりました
指摘頂いたことを参考に頑張ってみます
またわからないことあったら質問させてください >>230
インデックスで任意の要素を、ではなく、最初の要素固定なら
fuga.First()
でもいける fuga.First()がまさに求めていたものでした
fuga.ToList()というやり方も、非常に参考になります。
ありがとうございました。 >>235
fuga.ToList()の方は一旦条件に該当するもの全部の配列を作るから、First()を使うのと比べて無駄がある。
さらに言うなら、この場合はWhere()も必要無くて、hogehoge.First( e => e.hoge ==1 )で良い。 >>215
ありがとうございます。
私もその結論に至りました。 .netとapi絡みですがいいですか?
GetPrivateProfileStringですがどうやっても30000文字くらいまでしか読めません…
2000以降のOSだと読み込みの文字数制限無いって書いてるのに… なんででしょうか?
ちなみにC++から普通に全然読み込めました。 宣言はこんなかんじです。
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section,
string key, string def, StringBuilder retString,
int size, string path); 実際にはGetPrivateProfileStringAが呼び出されてるとか >>240
仮にそうだとして回避する事って出来るんですかね? こうやってみたけどダメでした… 無理かな…
[DllImport("Kernel32.dll", CharSet=CharSet.Unicode, EntryPoint="GetPrivateProfileStringW")] 無理かどうか以前にGetPrivateProfileStringで30000文字読み込むなんていう仕様がおかしい気が・・・ >>243
マニュアルには2000以降は制限なしって書いてるのに制限かかるのが不可解で… どこにそう書いてあるのか知らないけど自分の環境で試してみたら60000文字以上でも読めたよ sizeにバイト数ではなく文字数を渡しているとか? >>247
それでした…orz
半日悩んだ結果がこれ…orz >>247
いやそういう事でもやっぱないような…
これでいいんですよね??
StringBuilder temp = new StringBuilder(99999999);
GetPrivateProfileString(Section, Key, "", temp, 99999999, path); バッファの終端はNULL文字になるからそれだと99999998バイトまでしか読めないみたいよ
MSDNにその辺りのことが書いてある
99999999が仕様なら仕方ないけど、そうでないなら長さはちゃんと決めないとトラブルの元になるよ >>250
というかよくわからないのが
WritePrivateProfileString()は最初の一回は30000文字以上でも書き込めるけど
2回目に試しに上書きしてみようとしてもうまくできないんですよね…
""空文字を設定してもダメみたいで…
一旦30000文字以上を書き込むと上書きも出来なくなります。
これReadPrivateProfileString()が読み込めないのと何か関係してるのかな…
意味が分からない… INIファイルはWin16の頃の遺物だからそんなでかい文字列を扱ってトラブルになるのも仕方ないと思う
ってかMSDN見ても30000文字以上扱えるという記述ないけど >>253
今VC++からも読み込んでみたんですがどうやら勘違いでした。
31487文字までしかどうやっても読み込めませんでした。
GetPrivateProfileString()自体にやっぱ制限があるようです。 なんでそんな限界に挑戦したいの?
どんな環境でも動くようにしたくないのか? iniファイル使わざるを得ない事情があるんだろうけどそれならAPIより.NETライブラリ探したほうがいいんじゃないの >>256
古いアプリのファイルを読み込みたくて
>>257
何かよいソースないかさがしてみます。
最悪自力で読み込もうと思います。 >>258
ソースから探さなくてもnugetでiniパーサー見つかるでしょ >>259
なるほど。
>>260
そうですよね。 ビットフィールドないのけ?
あと固定長も
unsafeなんか入れたくないけど結構使うもん?
gchandleとmarshalでsafeにやった方がいいのかunsafe使いまくっても全然問題ないのか
みなさんの方針を教えてください >>262
32ビット固定とかなら好きに使えよ
marshalはよく使うがunsafe使う必要に迫られたことないな >>262
BufferでもBitArrayでもBitVector32でも好きに使えや クロージャだの非同期タスクだの高レベルなことは各言語記述性高まってるけど、
エンディアン指定してビット長さ指定してビットフィールドとか
そういう低レベルなことを簡単に記述できる方向の進歩って少ないよね…
30年前と同じにシフトしてマスクして足すという >>255
Windows NT 4 の頃に WritePrivateProfileString( ) をガンガン使ってたらたまに戻ってこないことがあったので、マイクロソフトにインシデント使って問い合わせたらすったもんだの末に「仕様です」って言われた w
もうその頃から捨てたがってるのがありありだったわ >>263-4
32ビット境界になってればいいけど…
そこまでまだ見てないけど多分なってないんだよなぁ
取り敢えずその辺当たってみるわありがとさん! >>266
ガンガンって一秒当たり1000回くらいコールしたの? >>265
高レベル低レベルっていうより需要とか汎用性の問題だと思いますが >>268
最大数十回程度だったと思う
ただ24時間運用の機器だったから再現テストがめちゃ大変だった
最後は自前で読み書きを実装した >>270
iniに記録する類の情報なんかアプリ終了時の保存しようよそもそもw
いきなり電源落ちたら困る?
そういうのはハード(UPSとか)で対応しなきゃw 下記のような処理をスマートに書くとどうなるでしょうか
for (int i = 0; i< 100; i++){
if (i< 50){
for (int j = 0; j< 20; j++){
if (j< 10){
hoge[idx] = 1;
}else{
hoge[idx] = 2;
}
idx++;
}
}else{
for (int j = 0; j< 20; j++){
if (j< 10){
hoge[idx] = 3;
}else{
hoge[idx] = 4;
}
idx++;
}
}
} >>272
その前に質問をスマートに書き込む技術を身に付けるのがいいぞ >>272
const int COUNT = 2000;
int idx = 0;
int[] hoge = new int[COUNT];
var tmp = Enumerable.Range(idx, COUNT).Select(x => x / 10 % 2 + x / 1000 * 2 + 1).ToArray();
Array.Copy(tmp, 0, hoge, idx, COUNT);
idx += COUNT; >>272
lengthとかcountなりプロパティ使えや ListでAddして行って後からToArrayにするのどうよ >>272
こんな感じ?
aはない方がいいかも
Action<int> a = (x) =>
{
hoge[idx] = x;
idx++;
};
Action<int, int> a2 = (first, second) =>
{
for (int i = 0; i < 10; i++) a(first);
for (int i = 0; i < 10; i++) a(second);
};
for (int i = 0; i < 50; i++) a2(1, 2);
for (int i = 0; i < 50; i++) a2(3, 4); Action<int> a = (x) => hoge[idx++] = x;
で良かったねw そんなテトリスを十行で書いたから偉いみたいな厨房コードより
一番はじめのコードで定数を意味のわかる形にするだけでええと思うで
デバッガでも追いやすいと思うし
1行にありったけ詰め込んじゃうとバグったときに追いにくいし仕様書のどこがどのコードと一致してるかもわかりにくい 言っちゃ悪いけど、この程度のコードが分かりづらいと思うなら
プログラマなんかやめた方がいいよw
>>279みたいな書き方をする目的は行数を減らすことじゃない。
>>272のコードにある重複部分を一つにまとめるとともに、2重ループで構成される
スパゲッティーな構造を平坦化して見通しを良くすること >>283
俺は少しでも読みにくいと思うなら誰でも読めるコードに倒す派
程度問題になるなら簡単な表現にするよ
何より仕様書に書けない
お前そのラムダ式仕様書でどうやって表現するの? 言っても無駄なタイプだと思うけど、まともなプログラマなら
>>279の方が>>272より何倍も読みやすいと感じるはずだと思うよ。
>>279が読みづらいと思うなら、それは端的に君の能力不足ですw
悪いけどね
まあ、「マジックナンバーガー」なんて本質と無関係のことを吠えてるレベルの人には
分からないかもしれん。 >>285
それは何人のプログラマにアンケートをとったの?
設計を語る割にはあんまりレビュー慣れしてないね
お前が不勉強だから俺のコードがわからないんだって解説が会社で通っているならまあそれがお前の不幸なんだろうな 俺はLinq使ってるコードの方がはるかに見やすいと思う 読める人が3人以上いれば使って良し
その場合、読めない奴は今後雑魚コーダーとして扱効果査定で技術力マイナス査定
俺らも遊びじゃないからね
何でもかんでも下に合わせるのはジャップランド運動会みたいで悪しき風習だ 初心者の質問スレってわからない大先生がまた出てきたよ Linq使うなとかvar使うなとかウザイ先生が定期的に湧くね >>292
じゃあ、設計書無いのにソースだけ見ていいって言ってるわけだ
俺らの仕事は設計書を書いた段階で95%は終ってなきゃいけないよね
いいソースってのは設計書の内容をソースに反映できていることであって
ソースの見てくれがいいことじゃないよ 設計書をコードに齟齬なく反映可能
だとすればその設計書はもはや設計書ではなくコードである
コードに置き換えるという無駄な行程を無くしてコンパイラに仕事をさせればよい
設計書をコードに齟齬なく反映不可能
だとすれば設計書至上論者の言ってることはハナから間違いとなる
反映不可能なのに反映したものが良いとはおかしな話だ
反映不可能なら書いたコードが設計書を正しく反映していると何をもって言えるのだろうか
結論
設計書至上主義者は現実が見えていないバカ 設計書は「誰の為に」「何の為に」あるのか理解してる?
まさかプログラマの為に作られてるとでも思ってるの? >>296
だから設計書書きたく無いって?w
情シスはいつになっても馬鹿だなw 今回の命題はコードを簡単にするにはどんなやり方がありますか?
ってことなのにありもしない設計書ベースにコードを簡単にすべきではないと主張するとか完全に馬鹿だろw よくわからんから具体例で議論してほしい
どういう設計書なら>>279がだめなの?
ここ初心者スレだから初心者にもわかるようにやってくれ >>301
>>300の「簡単」を「スマート」に置換しても主旨は全然変わらないからそれでいいよ >>302
ううんそれは本質じゃないよ
設計書もないのにソースの良し悪しを判断しようとしてるのが不味い また底辺プログラマくんが来てスレが荒れてるねw
一生拝承システムでも作ってろ 底辺かどうか知らんけど、ラムダ式をトリッキーでも何でもない
ごく普通の使い方しただけで上から目線で「わかりにくい」とか勘弁してほしいねw
>>279はラムダ式を使ってるだけで、考え方自体は普通の構造化プログラミングの方法論通り
共通部分を括り出して分割統治しただけ。
でも構造化プログラミングの段階で躓いてる人って実際割といるよね。
前の職場にも一つのメソッドに全部のロジックを詰め込んでダラダラ書く方が
分かりやすいと思い込んでる人がいて困った バカが書いた凝ったコードこそが悪夢だからね
コボラーをPGとして使わなきゃいけないなら全部フラットに書くのは実際無難な方法ではある
ウォーターフローが守られてる限りは問題なくスケールするし >>308
狙ってやってるのか不具合なのかわかりにくいな
普通にif文で条件判定入れてくれると読みやすいんだけど
まあ、それは設計書になんて書いてあるかだけどね >>310
単純に1ずつ増えるループ変数iがXを超えたかどうか(i>X)みたいなのは
条件判断なんて言わない。
I == Xになるまではiは絶対にX未満、一度Xを超えたらその後は絶対にi>Xに決まってるんだから、
普通に考えてただの無駄、それが言い過ぎなら仕方のない妥協の産物だ。
こういうコードを見て無駄でエレガントでないと感じないならプログラマ向いてないよマジで >>311
ううんそれは元のコードが仕様通りだったらの話
範囲で入る値が異なるコードを書くなら明示的にif文で条件判定を書いて欲しいんだよね
だからラムダのコードの方は俺には偶然によっかかって辛うじて成り立ってるコードに見えちゃう 何のこっちゃ
要求されているのは機能的に等価でよりスマートなコード以上でも以下でもないでしょ
YAGNIじゃないけど、こんなところで無限にありうる仕様変更の可能性に対して
備えてないからダメなんてただの言い掛かりでしかない ちなみに272氏は単純にこう書こうとは思わんかったん?
for (int i = 0; i< 100; i++){
if (i<**) hoge[i]=1;
if (i>=** && i<**) hoge[i]=2;
:
if (i>**) hoge[i]=4;
} >>313
違うよ
お前のコードは不具合にしか見えねーって言ってるの >>315
具体的にどうぞ
まあ無理しなくていいよ linqクソ遅いやん
for文の方が何倍か速いよね確か っていうかさあ、ループ変数が単純に増減するループの中で
ループ変数を定数と比較してるコードを見たら、なんだか気持ち悪いとか何か間違ってると
感じるのが普通だけど、>>312みたいに逆にそうでないとしっくりこないって感じる人間もいるんだから
世の中いろいろだね 添字アクセスはバグの温床だからforはなるべく使わない派だわ using ( var stream = new MemoryStream( hoge ) )
{
for ( int i = 0; i < 50; i++ )
{
for ( int j = 0; j < 10; j++ )
{
stream.WriteByte( 1 );
}
for ( int j = 0; j < 10; j++ )
{
stream.WriteByte( 2 );
}
}
for ( int i = 0; i < 50; i++ )
{
for ( int j = 0; j < 10; j++ )
{
stream.WriteByte( 3 );
}
for ( int j = 0; j < 10; j++ )
{
stream.WriteByte( 4 );
}
}
idx = ( int )stream.Position;
} 教えてください
ディスクトップの特定の場所の色が変わったらAを実行するというコードを書きたいのですが
どの様に書けばよいのでしょうか?
よろしくお願いします >>323
それは画面キャプチャが必要でそれだけでも一筋縄じゃできないような
タイマで監視するにしてもコスト大きすぎるし
他の条件は無いのか? >>324
ありがとうございます
アプリから通知が来た時に右下に通知の吹出が出るので
その時にAというプログラムを実行したいと考えているのですが難しそうですね >>271
設定とかを書いてる訳じゃないよ
詳しくは書けないけど要するに WritePrivateProfileString なんて使うのがバカって言う結論
装置制御用のPCだからUPSはもちろんハングアップしたら外部のハードウェアで電源Off/Onまでやるようになってる 通知ウィンドウ(?)をSpy++とかで調べておいて、そのウィンドウが出てるかポーリングするとか。 >>325
色はダメ
別のアプリの通知がでて同じ色の吹き出しが出たらどう区別すんの? >>272の質問の人何も言わずにとんずらしちゃったけど、
ひょっとしてラムダ式が分かりづらいって文句言ってたのが質問者本人だったのかなw >>334
コードをスマートに書き換えて、ってそもそも質問じゃないじゃん
ネタ振ってスレの様子見て遊んでいる人が混ざっているのだからいつまでも構わないでくれ >>327
し、初心者なので許してくださいww
>>330
なるほど〜その線でしらべてみます
…って思ったけどさっぱりわかりませんorz何処か誘導お願いします
>>332
大丈夫です。
ほかのアプリは黄色い色の通知はしないのでいけると思います >>339
もっと綺麗に書けそうに思うけど自分ではどうしたらいいか分からない、
っていうのも立派な質問だしスレの趣旨に反していると思えない >>341
その通知を出すアプリが何かわかればアドバイスできる人もいるかもしれない
色は問題ありすぎだから忘れろw
今のところ>>326が一番適切な回答だと思う >>341
デスクトップをキャプチャしてイメージにする。その特定の座標の色を取得する。
まずはそこから 次に上に書いてあるようの、デスクトップの画面更新をフックする。
WM_PAINTとかかな 色はダメだってw
OSがアップデートしたりソフトの使用が変わったら何の意味もない
もしそのアプリがc#と絡んでるならそっちをいじれ 通知のフックって具体的にはどうやるの。
アプリの中身知らなくても出来るもん? デスクトップの色解析はスジが悪いよな。
たまたま似たような画面が重なったら誤動作するし。 >>343
MultiChartsというチャートソフトなんですけど、通知をフックすると言うことは…ネイティブコードの解析が必要?
それが出来れば最高なんですけど私のスキルでそこまで出来ません
他に何も入っていない専用PCなので仕様はほとんど変わらないので
とりあえずスジが悪いかも知れませんが>>344さんの方法で調べてみます オープンソースで公開するってんならOSやソフトの仕様を考慮する必要があるけど、
全くの個人使用なら色で判断するってのはそう悪いアプローチでもないと思う
autohotkeyとかでできそうだけど 複数valueを登録できるdictionaryはありますか? Dictionary<T0, Tupple<T1,T2 ・・・>> >>356
tupleを活用する事で可能なんですね。
ありがとう、試してみます。 タプルをコレクションに入れるのはバグの温床
dynamicに匿名型突っ込む方がまだマシ 妙な小細工するより素直に複数の値の入れ物の型を定義した方が
分かりやすく使いやすいと思うけど 個人的には普通に格納用クラス作ったほうがいいと思うけどね >>361
要素を取り違えるバグだね
入れてるところまで遡らないと何番目の要素が何を意味するのか分からない
個人的には、タプルは即座に要素をバラして変数に展開するべきで
タプル型の変数やコレクションは決して使ってはいけない タプルを単一の値としてコレクションや変数に入れたことによる要素の取り違えに起因するバグはPythonだとよくある
C#7.0のタプルはその問題点を考慮して要素にラベルを付けられるようになってるね 絶滅危惧種だとは思うけど、コードレベルの設計書が必要な人達って未だいるんだね (´・ω・`) 普通にいるだろ
ていうかそういう奴はどれだけ詳細なコード設計を渡してもそれだけではコード書けなくて、
必ず類似したプログラムをサンプルとして渡してコピペさせてやる必要がある >>367
こう言う時ってどうしてる?
自分でコード書くのが正解なんだろうけど下流の仕事奪うとそれはそれで面倒な展開になる >>370
新米なら教えてやろうという気にもなるけど、それがベテランコボラーだったりするんだよな >>374
仕様を満たしてるかどうかと規約に違反してないかだけだろう
あとごくたまにどっかから拾ってきたオープンソースだとかどう見ても怪しいライブラリとか勝手に使おうとするアフォな人がいる
だいたい調べるとGPLとかGNUとかだったりする
オープンソースじゃねぇって言ってるだろwと
文化がわからないな >>375
それを、「レビュー」するの?
そんなのレビュー以前の話だと思うけど >>376
うーんでも見張ってないと入れるんだこれが
逆にどこでチェックするの? async/awaitですが、.NET FW4.0でも使えるみたいなのですが、使い方的に何か違いがあるのでしょうか。また使うにはどうしたらいいのでしょうか。 言語と.netは違います。
.net4でC#5を使うことは可能です。
何ら問題もないです。
使用するクラスが.net4で使えるかどうかを気を付けませう。 >>379
nugetでMicrosoft Async(Microsoft.Bcl.Async)をインストールする。
.Net4.5以降でTaskクラスにある一部のメソッドがTaskExクラスにあるらしい。 >>378
いいや、ここがちょうどいいと思う
ちょっと前にLivetとかPrismとか勝手に使われて
品証からストップされて納期前に大変な事になった
初心者スレでこそ警笛を鳴らしたい
勝手に使わないでね
こういうの大抵駄目だから >>383
>>1を読め
これ以上のスレチは荒らしだぞ
>「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
>他のスレッドでは書き込めないような低レベルな質問、
>質問者自身なんだか意味がよく分からない質問、
>ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 >>377
そんなもん自動化しろよ
人間はもっとクリエイティブな仕事をしないと金もらえないよ >>380-382
ありがとうございます
>>380
.NET4でシンプルな非同期処理やりたいだけです
>>382
それを確かどこかで見かけました
使用するにあたって特に問題ないのですね
試してみます >>386
品証は駄目って判断したねぇ
なんでもこれ使ってるってどっかに使ってるって記述しないといけなくてお客さんのアプリだから駄目って結論になったらしい
まあ、こういうの大抵駄目だから今更驚かんが >>387
.NET4.5.2で作った非同期プログラムを.NET4.0環境に入れる必要が出てそれ使ったわ
上に書いてあるとおり一部のTaskをTaskExに変えたぐらいで基本問題なく動いたよ 納品直前まで使ってるGUIフレームワークが何かも把握してないとかいくらなんでも仕事サボりすぎ
特に使用制限厳しい案件でその管理体制ならろくな会社じゃないな Apache2ですらNGとか業種によっては笑い話レベルだな 最近は、マイクロソフト製ですらオープンソース(Ms-PL等)で公開してるものも多いのに、それらが利用できないとは大変だな。 >>388
その程度の理解でひっくり返されるのなら現場は大迷惑だな PowerShellもRoslynもMSBuildも駄目なのかなwww 企業が責任を持ってメンテナンスしている安心感
保守契約で守られている安心感
なんかおじいさん達にはそういうのが大事らしい
自社の製品見た上で企業への信頼とか言ってるなら正気の沙汰ではない あるあるだと思うけど。うちも割と悩んで載せることにしたものはあったな。
金はいくらでも払うが、明示する系はダメとか昔は結構あった。
法務部が腰重いのもある。 >>398
そうなんだよねぇ
場所によってはお金払って自由って方が通りやすいんだよね
ソフトの値段なんてたかが知れてるからね
ハード1個売れるだけで簡単に億いくし >>392
2017になって、特にそう思う。
一応、うちはPrismはおkだけどな … >>400
うちはってよりお客がだよね
JRとかNTTとか高確率で駄目って言いそう そいつらは自分ちのTVのマニュアル見たことないんだろ
今はオープンソースライセンス文がずらずら並んでる >>402
実際どうかってよりでかい会社の請負って間に幾つか会社が入っててそのうちの一人でも駄目って判断をすれば駄目なんだよ
その人は多分プログラマじゃないし今まで必要なかったのに必要になるってところもおそらく理解できない
そんなとこだよ 企業が割に合うかどうかわからないリスクを避けるのは当たり前だと思うけどね。
シロがシロであることを確証するのにもコストかかるのが分からないのはお子様過ぎるんじゃないの?w 申請出してて納期直前で駄目って返って来たときにどれだけ対処できるかだよね そういう場合はリスケに応じることって発注契約書に書いてるわ
さっさと返事しないのが悪いんだから 別に使えないなら使えないなりの見積もり立てるからいいんだよ
ギリギリに返してくる馬鹿会社が死ね 今のASP.NETなんか使うとMS非保証のOSSが山ほど入るよね
日本型の業界構造のままでは開発環境すらまともに使い物にならない時代になってしまった でもこれ危険だよね
ms側がバージョンアップして
フリーソフトにおんぶで抱っこのソースにしちゃって
フリーソフトの更新が止まっちゃってるときに
msバージョンアップ対応するってときに
窮地に立たされんじゃないの? 勝手に無駄なハードル作りまくって
それで自滅するのが好きだよな、日本って
ちょっと規模が大きくなると
外への攻勢に疲れるのか知らんが、身内を攻撃し始める >>411
でもフリーソフトの更新止まっちゃったら具体的にどうするの? >>413
げー、最悪
じゃあ、オープンソースってレビュー対象なんだね オープンソースのフリーソフトと同じ機能を内製するよりリスクは低いわけだから
問題にしているのは権利関係が多いんじゃね 医療機関や原発施設とか
僅かでも可能性があっちゃいけないようなケースも稀にあるけど
それに同じ次元の宗教を一般民生用途にも当てはめようとするのが日本
石橋を叩くと言えば聞こえは良いが、叩いた上で渡らないという。
だから中国に置いてかれちゃうんだよ それはリスクじゃなくてコスト
リスクっていのは訴訟リスクのことだよ
大丈夫か
このレベルの奴が日本の企業はダメとか上から目線で言ってるだからへそ茶も極まるなw c#でwebdriverを使用してChromeを自動操作しているんですが
ページ遷移する際に待機時間を設定する方法がわかりません
具体的にいうと以下のように時間指定した後
2つのサイトを連続して開くような処理なのですが
待機時間がむしされてページ遷移してしまいます。
webDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
webDriver.Url = ウェブサイト1;
webDriver.Url = ウェブサイト2;
どなたか解決法ご存知の方いたら教えて頂けますでしょうか?
どうぞよろしくお願いします 日本の開発は時代遅れとか言ってるアウトサイダーに限って
じゃあ、実際に問題がおこったら俺しーらねみたいなクソばっかで
信用できない シンタックスシュガーにつつまれてるからお前ら気づいてないかもしれないけど
ここは初心者用の質問スレだ >>417
出荷前までのバグはコストだけど、出荷後のバグはリスクじゃね? >>418
C#で使った事ないけど、Timerとか?
C# Timerでググったらそれっぽいの出たよ。 最近だと、Webアプリ(?)って、何で作ればいいんでしょう?
昔VS2018の時代はWebアプリで作ったんですけど。 >>418
触ったこともないけどちょろっと検索した感じ
findElementなりで要素検索するときに見つかるまで待機するためのもんらしいけど
1ページ目に遷移した後なんか適当な要素検索したらどう? >>418
まさか引数がmsとかいうオチじゃないだろうな? >>418
それ待機時間を指定じゃないから…
WebDriverWait http://tech.bbtune.com/csharp/items/3-18.html
インスタンスHelloをintに型のするまではわかるんですが
すでに値が設定されているローカル変数にクラスのインスタンスを代入することの意味がわかりません
Console.WriteLine("i = {0}",i); i++;はどういう経緯でYの値が無視されてXの値が代入されてるんですか?
明示的なキャストでreturn h.x;はどこに代入されてるのかもわかりません。
どなたか教えてください。宜しくお願いします。 Linq to SQLについて質問があります。
現在DBから特定のIDの最大値を取得する問合せをしているのですが、生成されるSQL文があまり効率のいいものではありません。
どの様に記述すれば効率の良いSQLが生成されるか、ご教示いただけないでしょうか。
【期待値】
SELECT MAX(Id) FROM TestTable
【検証1】
■期待値のSQLが発行されるが、レコードが無い場合例外となる
System.Data.Linq.Table<Test> table = context.GetTable<Test>();
table.Max(i => i.Id);
【検証2】
■レコードが無い場合はnullとして結果が返るが、期待したSQLではない
System.Data.Linq.Table<Test> table = context.GetTable<Test>();
table.Max(i => (int?)i.Id);
〇生成されたSQL(サブクエリが生成されてしまう)
SELECT MAX([t1].[value]) AS [value]
FROM (
SELECT [t0].[Id] AS [value]
FROM [TestTable] AS [t0]
) AS [t1]
よろしくお願いいたします。 >>430
道具なんだから使えない場面で無理して使うな >>412
そもそも更新が止まる程長い間同じものを使い続けない
今はビジネスの変化がすごく早い
だからシステムも追随して早く変化しなければ競争に負ける
システムの更新が早ければ新陳代謝で旬の過ぎたOSSへの依存はそのうち消える
日本企業においてはビジネスが変化しないのでその限りではない 昔も英字 3 文字の略号で示される「新しい技術」が流行ったものだが,今となってはどこにいったのかさっぱり >>430
レコードがない場合は検索しなきゃいいんじゃないか? 質問者の430です。
早速のレスありがとうございます。
>>431
出来るか、出来ないかが判らないため、出来る方法が無いか質問いたしました。
>>434
レコードカウント->MAX集計の場合、2回クエリが発行されるため1回で結果が返る方法などないでしょうか? Linq to SQLはディスコンなので使うな
が正解 >>436さん
EntityFrameworkの場合、ちょっと(?)ではあるのですが多少改善されているようでした。
Linq to SQLは.NET3.5縛りがあるので仕方なくとなります。。
【EntityFrameworkの場合】※サンプルは削除してしまったので若干うろ覚えです。
SELECT t1.Id FROM ( SELECT Max(t0.Id) TestTable AS t0) AS t1 >>429
どこでつまづいてるのか分からん…
> すでに値が設定されているローカル変数にクラスのインスタンスを代入することの意味がわかりません
代入で値が変わりましたよってのを表すためじゃない? まあ別にいらないけど
> Console.WriteLine("i = {0}",i); i++;はどういう経緯でYの値が無視されてXの値が代入されてるんですか?
> 明示的なキャストでreturn h.x;はどこに代入されてるのかもわかりません。
iはint型だからXの値とかYの値とか関係ない
iに入るのはhをHelloからintに変換した結果、つまりop_implicit(h)の返値
h = new Hello(1)だからh.x=1, h.y=10
なのでop_implicit(h)はh.xである1を返す
よってi = (int)hによってiに1が代入される PrismなんてほぼMS公式なのになぁ
JSONとかもJson.NET使えばいいから標準ライブラリには入れないよって感じだし
Web周りとかをやることになったらjQueryもReactもすべて禁止になるのかな >>439
toolkitが曲者
これ不具合があっても平気で放置されてるよ
完全自己責任じゃないのこれ? >>429
ぶっちゃけC#離れてしばらく経つから初見だけど、operater何ちゃらってのが
クラスを値型にキャストする時。i = x
値型をクラスにキャストする時。x =i(コントラスタ経由)
それぞれどのフィールドを反映させるか明示させてるだけだよね。
キャストしたら複数あるフィールドのどれが値型に入るか、値型がどのフィールドに入るか分からないから、やってみないと分からないし、漏れた分はどこいった?ってなって怖いから。
getter/setterやプロパティあれば良いだけだから、余程頻繁にやらない限りはコード書くコストが赤字になりそうだが。
yのyは無視というかXYメソッドでしか使われてない。 >>438
>>442
返信ありがとうございます
アドバイスを元に見直してみたところ相当勘違いがあったことがわかりましたが何とか理解できました 今からC#のGUIプログラミングの勉強をしようと思ってるんですが、何から手をつけたらいいでしょうか。
WindowsFormsは古過ぎるらしいですし、WPFもあんまり評判がよくないようです?
UWPというのはWin10専用らしいんですが、
今の環境がWindows7で、今のところ10にする予定もないので、7で動いてくれないと困ります。 >>444
個人のお勉強目的でデスクトップアプリ作るならWindows Formsで十分
Web上に日本語情報も多いし
Formsで満足できなくなってきたときに、より新しいものに挑戦してみたらいい >>444
とりあえずWindowsFormしかないんじゃないだろか? >>444
WPF、Win8、Win8.1、WP、UWPと、ことごとく新しいGUIはC#+XAMLで作られてるから、勉強だと思ってWPFで作っておいた方が後々技術が応用しやすいよ。 WPFは標準の画面パーツがFormの半分すら無いから始めてやるにはあまりオススメはできんかな
Formで出来たことをやろうとするとnugetで探す羽目になるのが >>447
先のこと考えるならHTMLを選ぶべきでは >>444
悩ましい選択だよね
WinFormsは古いのは確かだけど、今後も使い続けられていくだろうし、枯れた技術だとも言える
WPFは相対的に新しいけど、将来性が微妙という点では五十歩百歩
プログラミングの経験や知識がそれほどでないなら、WinFormsのほうが習得はしやすいかな
より単純明快で、Web等で入手できる情報もより豊富だからね
古くても知っておけばその知識は無駄にはならないと思うし
WPFはMVVMの宗教論争をくぐり抜けて、自分なりのスタイルを確立できる自信がある人で
ないと、なかなかお勧めできないw 勉強が目的なのか作りたいものが目的なのかで挫折率って大きく変わるから作りたいものがformsで出来るならそこから始めたほうが絶対に良い WPFって見えないんだよね処理が
バグっててもハイここですってわかりにくい WPFの弱いイベントパターン化にすごく苦労したわ。
UWPはsegoeフォントとか色々あるから、とりあえずWinFormsで良いと思う。 wpfのBindingはエラーが出ないから初心者には辛いかもしれんね
却ってUWPのx:Bindならエラーが出るから初心者向けかもしれん >>458
内容にもよるし言語によって向き不向きもあるから、何とも言えん >>458
レンタルサーバーで実行できるのはスクリプト言語だけやぞ >>461
有料レンタルサーバーとかブルジョワかよ! >>463
例えばAzureの無料プランでもC#のWebアプリ書けるだろ WinFormsでちょっとしたローカルデータベースのアプリを個人で作ってみる予定です
年間10000レコードくらいの規模です。
ググってるとSQLiteかSQLServerCEか、みたいな感じなんですが
選ぶとしたらどういう基準で選べばいいでしょうか?
C#でデータベース自体扱ったことがないので、ネットで情報が手に入りやすく
初心者にやさしそうな方を選ぼうと思っています。
Access+vbaはいじったことあるので、accdbにしようかと思ったのですが
access入ってないPCで使うのにAccess選ぶのもどうかと思ったのと
OfficeかAccessランタイム辺りをインストしたPCでないと最適化が使えそうにない?ので
選択肢から外そうかと思っています。(最適化できるならAccessでいいかとも思っています)
後、DataSetとTableAdapterはある程度知っているのですが
今やるならEntityFrameworkとか使った方がいいでしょうか?
EntityFrameworkだけでも何やらいろんな方法が出てくるのですが
いまいちどれを選んだらいいかわかりません。
どうせなら今風のやり方を学んでみようかと思ってますが・・・ >>465
個人で使うだけならSQLiteで十分
EFなんか要らん >>465
SQLServerCE(今の正式名称はSQL Server Compact)は、マイクロソフトから見捨てられたと言って良い状態。
SQLiteの方が色々揃ってて良いよ。
ViaualStudioの管理用のDBも、昔はSQL Server Compactだったけど、今はSQLiteになったし。 >>465
DataSetは捨ててDapper使え >>465
SQL覚えるの面倒とかなら、EFもありじゃないかな
EFcoreから、SQLite正式対応したし SQLiteとDapperかな
年間1万レコードなら正直何でも良い気もするけど >>466
>>467
ありがとうございます
SQLiteにしようかと思います。
>>468
>>465
DataSetは結構わかりやすくてよかったのですが
EFは正直Webサイト読んでてもなんかピンと来ず
どんどん新しいことが増えていってるせいか情報がまとまってるところが見当たらなくて…
でも、DataSetが古くなった今では?こき下ろしてるサイトも結構見かけて
使い続けるのもどうかなぁと思ったり…
DBからデータを引っ張ってくるところは
かなり簡素な内容になる予定なので
SQL覚えるよかEFを学ぶほうがコストはよっぽどかかると思います。
DapperっていうのはEFよりも簡素でその分簡単に扱えるORMって感じですかね?
これが自分にはいい選択肢かもしれないです。
ちょっとググってきます。 そういう時はPostgreSql on Dockerで決まりやろ >>472
>ちょっとしたローカルデータベース
って書いてあるだろ >>471
sql serverとdatasetで十分だろ formに大量のコントロール配置すると、ロードしたときや画面更新するときにパラパラパラパラって表示されるんですが一気に表示させられないでしょうか
〜Layoutは全く効果ありませんでした
DoubleBufferなるものはまだ確認してません
何か効果的な対策あればお願いします >>468
上の件とは関係ない純粋な技術的興味なんだけど、リポジトリパターンでDapper使った場合のUnitテストをメモリ上でやる方法知らない? >>480
DBを使わない実装に差し替えればいい
何のためのリポジトリだよ 問題を切り分けて考えよう
リポジトリを使う方のテストは実装を差し替えてテストするとして、
リポジトリ自体のテストの方はクエリの確認が目的だ
だったらDBは本番と同じものを使わないと意味がない
SQLiteみたいに揮発モードのあるDBならそれでいいが、
それが無いからといってSQLiteに差し替えるんではなくて、実環境がpostgresなら必ずpostgresを使うべき
リポジトリのテストだけに使うんなら少々遅くても大した問題にはならない >>482
EF CoreならInMemoryでUnitテストできるでしょ。Dapperで同じようなことやる方法ないかな?実DB使うのはIntegrationテストやね。 >>484
Dapper使ってるならDBMSに対してSQLを直に実行してるんだからどう転んでもテストはDBMSに依存する
テストフェーズは関係ない
なんか勘違いしてるようだけど、この場合EFに相当するのはDapperではなくリポジトリの方だ
EFのInMemoryモードを使うことはリポジトリをインメモリな実装に差し替えることに相当する 現行で進んでるような専用の板が見付からなかったのでスレチかも知れないけど助けてくれませんか
概念的な話になります
http通信を行っているc#のサーバ側の開発に携わったんだけどリソースって言葉が曖昧すぎて困ってます
httpで通信するときに
put ←動作
uri ←対象
body ←引数
渡してるのはuriとbodyだからこの二つがリソースを指すのだろうか??
それともどちらか片方? >>489
リソースの定義が曖昧だとしても実用上何か困る? >>490
今あるやつを猿真似すれば良いだけだから開発には困らない
ただ理解して書かないと何を何のために追加したのかも説明できないから理解したい
言葉の整理がしたくて調べてたけどリソースについて全然記述が見つからず... >>489
RESTのリソースっていうのは「顧客1」「5月25日の投稿」といった、名前によって識別される何かを指す抽象概念
Webならデータがサーバーに格納されてURLによってアクセス可能な状態になった時点でリソースとなる >>491
リソースuri
リソースbody
でいいんじゃないか? >>492
クライアントは
動作としてputなどを
何に動作させるかのためにURLを
データ(リソース)としてbodyを
ってことで良いのかな?
>>493
そうなっててでも違うのかあってるのかみたいになってるんだ >>494
クライアントはリソースに対する操作とその結果を扱っているにすぎない
リソースの実体は常にサーバーにある >>495
あ 書き方が悪かった
クライアントが上記のように通信してきたとしたら
サーバー側は上記を三つのように解釈して処理をする?
って聞いた意味だった
データをentityに受け取って、URLで識別してアクセス可能になった
この状態をリソースと呼ぶ?それともentityのことをリソースと呼ぶ...? >>488
リポジトリの差し替えじゃなくてproviderの差し替えだろ >>496
クライアントが送ってきたものはリソースではなく単なる操作
その操作対象となる、サーバー側のDBやファイルシステムにある何かがリソース >>498
ああああああああああああああああああああああああああああああああああああああ
わかった 今わかったかも
Aのファイルがサーバーにあったとしたときに
クライアント
Aにputするよ
URLは取り決めでxxxxだよ
Aに操作する値はbodyだよ
こういうときにサーバーで言うリソースってのは
クライアントが送ってきた情報ではなく、その対象となるAか!!! 君がそのPJではリソースとはこういう意味で使ってますと決めればいいやん。 >>497
一緒だよ
アプリからのエンティティの操作がDBMSに依存しないことをEFが担保する
それをMSがproviderの差し替えで実装してようが、そんなことはどうでもいい
少なくともDapperを使って実装したリポジトリパターンではその責任をリポジトリに負わせているのだから、当然リポジトリを差し替えるのが筋 >>500
追加開発だから無理だった
リソースの説明よんでも理解できなかったから一般的にどのような意味なのか知りたかった
こんな感じだった >>501
各DBの違いを吸収するためにproviderを作ってるのはあくまでもDBベンダーだからね。 WinFormでForm1.csで使用しているコントロールがデザインのどこにあるか探す方法って、
Form1.Designer.csの座標を見る以外にありますでしょうか?
また変数等を検索する時、コメント部分はスキップする方法はありますでしょうか? アプリ終了時に手動で破棄するべきリソースとそうでないリソースの区別はどうつけたらいいのですか。
Disposeメソッドを持っているクラスのインスタンスは全部、アプリ終了時にDisposeすべきなのでしょうか。 >>504
どんな状況かよく分からんがドキュメントアウトラインは?
検索は全ての参照を検索(Shift+F12)とか 数値の配列(リスト)が30程度あって、その配列を要素ごとに加算して
一つの配列にしたいのですが、何かいい方法あるでしょうか。 >>508
ありがとうございます!
すごくイカしてます!
早速試してみます あ、元になる数値配列の要素数がそれぞれ違う場合は、
public static int[] CombineArray(int[] dest, params int[][] source)
{
int n = dest.Length;
for(int i = 0; i < source.Length; i++)
{
for(int j = 0; j < source[i].Length; j++)
{
dest[j] += source[i][j];
}
}
return dest;
}
で >>506
状況は引き継いだソフトが、テスト用のコントロールも貼りまくりで、
使用しているコントロール名も「label1」とか貼ったまま使ってて、
未使用のコントロールも沢山あるので、
未使用はコメントにしたり名前を付けて整理しているところです。
ドキュメントアウトラインで整理しながら簡単に見つけられますね。
参照の検索で使用しているか確認出来ますね。
ありがとうございました。 未使用は果たして本当に未使用かな?
ってぐらい動的に変わるコントロールがあったりして作った奴ぶっ殺したくなることもしばしば >>511
そういう状況だとthis.Controls["label" + i]なんてやってるかもしれなくて
全ての参照を検索じゃすくいきれないかも知れないから要注意だぞ >>510
ありがとうございます
動作確認してみましたが問題なく、ソースの量もわかりやすさも文句無しでした
本当に助かりました! C#の言語的な話じゃないので入れ違いかもしれないですけど
パワポをC#から弄ろうとしてますが、ファイルを掴んだままになってしまいます。
using System.Windows.Forms;
using DocumentFormat.OpenXml.Packaging;
PresentationDocument ppt = PresentationDocument.Open(@"D:\A.pptx", true);
ppt.SaveAs(@"D:\B.pptx");
ppt.Close();
ppt.Dispose();
MessageBox.Show("できました");
A.pptx を読み込んで B.pptx に書き込むだけでテストしてますが
この実行プロセスを終了させないと(「できました」の表示の時点では) B.pptx が掴まれているらしく
開いたりコピーしたりできません。
誰が掴んでるか調べる手段はありませんでしょうか。 そうじゃなくて、Close と Dispose を明示しているにも関わらず
内部で保存先のファイルを掴んだままになっちゃってて弄れない、って意味です。
プロセス(EXE)を落とせば解放されるんですけど、続きの処理があるもんで。 SaveAsがOpenXmlPackageオブジェクト返すじゃん? これIDisposable なんと!
まさにビンゴでした。
ppt.SaveAs(@"D:\B.pptx").Dispose();
で無事に目的を果たせました!
ありがとうございました!! Disposeが実行された != オブジェクトが解放された そういやusing使っても明示的にCloseする必要ってあるのかね? すみません
Char.IsNumber()メソッドは文字列の内の一桁しか判別できないのですか?また2桁以上を判別したい場合はどのメソッドを使うと良いのでしょうか 文字と文字列は区別付けよう
ところでChar.IsNumberはいわゆる全角の数字とかローマ数字とかもtrueって評価するけどその辺どうすんの? >>525
C# string isnumberでググれ
いくらでもでてくる テキストボックスに突っ込まれた文字列が数値かそうでないか判断したいんだきっと
でもisnumberじゃ駄目だったよイマココ
int.parseだきっとint.parseが求める答えだったんだよ!
シラネ( ´∀`)b >>529
判断したいのならTryつけようよ
>>525
むしろChar.IsNumberとか知らなかった
文字列 数値 変換 とかでググるとTryParseがすぐ出てくるはず
outが嫌なら別の当たって 符号付きとか全角とかアラビア数字とかHとかどう判定したいのっと なるほど!
やっぱりTryParseメソッドが良さそうですね
>>529さんのおっしゃる通りでした!
確かにこの質問だけでは>>526さんや>>534さんのような問題も出てくるんですね!申し訳ありませんでした。判別したかったのは一般的な全角と半角の数字のみでした。
>>526さんChar.IsNumberに渡すのはstring のような文字列型も渡せるのではないのですか?
>>530さんConvert.toint32メソッドは文字や文字列を渡すとスローされるのではないのですか?
526
529
531
533
534さん相談に乗っていただきありがとうございました! >>532
プログラムの回答って必要最小限でぶっきらぼうに回答すると全部嫌味に見える
そういうつもりはないんだよ アルファベットのIVX使ってギリシャ数字書くやつが居るから面倒なんだわ >>535
ないと思うけど、国外向けのプログラムを作る時はロケールも意識しないとあかんよ >>535
> Char.IsNumberに渡すのはstring のような文字列型も渡せるのではないのですか?
Char.IsNumberにStringを渡せるオーバーロードの引数は
Char.IsNumber(String, int)
この文字列の何番目の文字を判定しますか? ってこと そんなオーバーロードあるのかw
stringのインデクサがあれば要らないはずだけど 最近.net2.0の案件ばかりで泣きたくなってくる 古いものの方が安心感がある
って人多いよね
何の根拠もないんだけどw >>543
あるだろ
バカがいじらねぇからw
ウィルスより質が悪いって認識されてんだろ >>543
ほとんどの場合は君が被害妄想全開で勘違いしてるような理由じゃなくて
再テストするコストの問題だと思うけどね >>541
この業界は9割以上がレガシーの保守らしいぞ
日本人はソフトになるととにかく新しいものを作りたがらない 失敗の可能性にお金を払いたくないだけですな
とても便利になろうとも失敗の可能性があるからには手を出したくないって方が多い印象 それが最大の失敗だよな
ミスを恐れて何もしないで結果、損をする
ダメ人間そのままじゃないか っていうか、どんな会社でも君が無給の勤労奉仕でやるっていうのならダメだって言わないと思うよ。
コストなんか問題じゃないんだって本気で思ってるのなら是非やったら?w スレの主旨とそれ以前に板のローカルルールくらい守れよ >>549
スレのルールすら守れない子供は余所に行こうね 使用しているapiをすべて記録してあればバージョンアップ時に楽なのかもな 記録しても変更できないんじゃ意味ないよ
変更を容易にするために日頃からリファクタリングをすること
これが唯一の正解なんだよ
塩漬けは最もやってはいけない行為 >>556
そうだね
ずいぶん昔にソース管理に登録されてから変更のないシステムを一部改修することになって、本番稼働してるコードと同一かどうかを調べるのが大変なクソ現場です Taskをラップした方がわかりやすいし他の言語にも移植しやすい UWPに至っては、半ば強制的にasync await使わされます
ライブラリがそれ前提で作られているからね 今時PythonやJavaScriptにもasyncがあるのに何を言っているのか
なんだかんだC#のやり方は正しくて他の言語もすぐに追従する 使いはするけど仕組みはよくわかってない人が多いんじゃないかな
実際はreturnしてるけどそういう風には見えない async awaitの説明サイトがあんまり初心者もは優しくないんだよな
どれもいまいちというか
何故かTaskの説明ばかり
重要な事にはほとんど触れてない C#は突出して新しいことをやっているわけではないが
まだマイナーだけど光るものを見つけてきてメインストリームに持ってくるときの
取捨選択とデザインのセンスが神がかっているという印象 >>563
非同期(スレッド)を理解せずに非同期メソッドが使えるはずがなく、
そもそも非同期自体が初心者が気軽に使えるような機能じゃないんだから当たり前だw
っていうか、@ITの記事はちょっと説明が足りない部分はあるけどよく書けてるでしょ
あれで何が不満なんだ? C#でintの配列を保存したファイルを読み込んでint配列に設定したいんですが
まずbyte[]に読み込んでそれを変換するという形になりますか?
一番効率の良い方法ってどんなでしょうか?
System.IO.FileStream fs = System.IO.File.OpenRead(path);
byte[] b = new [4*32];
fs.Read(b, 0, 4*32);
fs.Close();
int[] = n = new [32];
コピーはひとつずつする以外にどういうやり方があるでしょうか? >>567
var buffer = new int[ 32 ];
using( var fs = File.OpenStream( path ) )
using( var reader = new BinaryReader( fs, Encoding.Ascii, true ) )
{
for ( int i = 0; i < buffer.Length; ++i )
{
buffer[ i ] = reader.ReadInt32();
}
} >>568
そういう読み込み方があるんですね。ありがとうございます。 >>567
一番効率が良いというとやはりポインタにしてC++で言う所のreinterpret_castだけど
C#ではunsafeになり非推奨なので、基本形は>>568のようなBinaryReader/Writerになると思う
汎用的な所だとバイト配列と数値型の変換を行うBitConverter、IntPtrを介して遣り取りするMarshal.Copy
UnmanagedMemoryAccessorのバックエンドとなるSafeBuffer(ジェネリック及び構造体配列が指定可能)など
うちSafeBufferは抽象クラスなので http://ideone.com/P6ZpjV みたいな実装を自前で書く必要あり 1つ忘れてた、Buffer.BlockCopyでバッファ自体をコピー可能、プリミティブ配列同士ならこれが最もシンプルだったような
Stream.Readの一部実装はArrayなら何でも読み込めた気がするけど、無理矢理渡す方法がアレなので…
あとSafeBufferの配列読み書きはMarshal.AlignedSizeOf<T>(内部メソッド)のバイトサイズでアライメントされる ポインタ操作ってリトルエンディアンは保証されてるのか? Bufferなんてクラスが1.1の時代からあったのか知らなかったw
>>567みたいなのはbyte[]でまとめて読んでint[]にunsafeかCopyMemory使って
コピーしてたなあ
>>567は配列の要素が固定なら固定サイズバッファの共用体使えば
コピーなしでいけるんじゃないかな 質問の主語がわからんが、int配列のデータをWriteして、1バイトづつReadしたら、もちろん逆になってるよ 環境依存じゃないかって言ってるならたぶん理念的には環境依存なんだろうね
68kみたいにビッグエンディアンのC#の動作環境があったとしたら、
その環境ではbyte[]を*intで正常に読めないと思う まあファイルI/Oはメモリー操作に比べると思いっきり遅いから
何やっても大して早くならんけどね 話題とは関係ないけどこれC#にあったっけ?
>File.OpenStream >>576
だからこそパフォーマンスが必要なら1つずつチビチビじゃなくて一度になるべくまとめて読み書きするんですよw >>578
基本的なことだけど、バッファがあるからアプリケーションレベルで小細工する必要はないよ >>579
Windowsのアーキテクチャーに詳しいわけじゃないけど、
書き込みは確かにディスクキャッシュにバッファリングされるから
プログラム側でまとめて書いても効果薄いかもしれないけど、
読み出し時にはHWレベルでもOSレベルでも大きなキャッシュなんか
用意してないはずだから、プログラム側でまとめて読む意味はあると思うよ >>577
Java と勘違いしてるか IO.FileStream( ) 辺りと混同してるんでしょ >>579-580
それ以前にメソッド呼び出しだってコストはかかるわけで >>577
正しくは、File.OpenRead()だね。
良く確かめずにコピペしてたら駄目だなw >>580
検証したことないけど、FileOptions.SequentialScan指定してFileStreamを作成したらprefetch効かないかな。 >>580
ディスクの読み書きってさ、最小限でもセクターって単位で処理するんだが今のWindows10だと4096バイト有るんだわ
だから1バイト読んでもメモリーには最小でも4096バイト入るわけだね >>586
HDDの物理層の知識はゼロだけど、セクターってのはファイルシステム上の概念であって
最小の読み出し単位じゃないと思うよw
SSDみたいなフラッシュメモリーには最小の書き換え単位が存在するけど
最小の読み出し単位は存在しない 物理層も高速化のためにセクタ単位で読んでるはずよ
ファイルシステムより低位の概念 >>587
ファイルシステム上の最小概念はクラスタ
セクタじゃない >>587
ディスクってさ、回転するからそれとシンクロして読まないと一周待たないといけなくなるんだよね
だからディスクは決まったバイト数をシーケンシャルに読むのが当たり前なんです
で。その最小単位をセクターと呼んでwindows10だと4096バイト有る
SSDはそんなこと無いけど、HDDと同じ振る舞いで動くようにセクタ管理しています Windows10だからというよりHDDが新しいからだと思われ >>591
7かVistaあたりで2Tの壁が取っ払われた時セクササイズが変わったようだ(前は512) 定義は色々違うけど概ね
セクター ... 物理的に読み書きできる単位
ブロック... 論理的に読み書きできる単位
クラスタ ... ファイルシステムの割り当て単位
って言う場合が多い
なお HDD でも1バイトだけ読み出したり書き換えたりはできない
必ずセクター単位の読み書きになる >>564
そんな感じだよね
自分みたいな老体にはちょうど良い 今時OSどころかBIOSでさえ、ディスクの物理的なセクターとか管理できてないけどな UDPでデータをBeginiReceiveで非同期受信したらToastで受信文字列を表示させたいんだが、以下みたいなバックグラウンドスレッドからGUI操作はできませんみたいなのがでる
Java.Lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
これ対処どうしたらいいかな
Javaのやり方は見つけたけど、Xamarinだとどうしたらいいかいまいちわからん「 あ、ごめんw
Xamarinスレと思って素で間違えた
失礼しました
ちなみにSynchronizationContext使ったら解決しました ブラウザコントロールを使ったアプリを作りたいんですが、
WinFFormsでもWPFでも、webサイトを開くと、ブラウザが古いって言われてマトモに表示できません。
新しいブラウザコントロールはどうやって使用したらいいでしょうか? Electronにでも乗り換えてiframeでいいよ >>599
「c# ie バージョン」でググれば解決策出る >>599
"c# webbrowser ie バージョン"でググると色々出てくるよ
要はレジストリを弄る必要がるんだが、プログラムから変更して戻すパターンも有るから
探すと良いよ WPFのデータバインディングって速度速かったりするん?
コントロールとDBをリンク出来るような感じって思って良いんだよね? >>605
件数と使う「Control」によるらしい >>606
じゃあXMLに保存された1万件の音楽情報を
グリッドに展開するとしたら? データバインディングの動きを理解してない以上
手を出さねーほうが無難じゃね〜の? $$$4.3$$$
"V"="1.3335412","0","1","3Q", ↓このような処理があった時にbutton1を押して無限ループのタスクを実行した後に
button2のクリックイベントからtaskを止める方法ってありますでしょうか?どなたか教えてください
Task task;
private async void button1_Click(object sender, EventArgs e)
{
task = doTask();
}
private async Task doTask()
{
await Task.Run(() =>
{
while (true)
{
// 無限ループ
}
}
}
private async void button2_Click(object sender, EventArgs e)
{
// ここでtaskを止めたい
} >>611
フラグ作って無限ループ中にチェック
button2のクリックでフラグセット >>611
C#だとCancellationTokenSource ってのを使うのが定石だね
詳しくはwebで >>611
こういう場合、無限ループの中でどんな処理を行う予定なの? >>611
外側から強制的に止めたいとか思ってるならその発想は危険な考え違い >>612
ボタン2はタスクを止める処理と書きましたが
実際にはonとoffの処理を兼ねているので
フラグを使った制御を行うと、例えばボタンを連打した時におかしな挙動なってしまうような気がします。
>>613
CancellationTokenSource ってタスクの中から制御するのかとおもってたのですが
外からでも制御できるんですね。調べてみます。
>>614
スクレイピングです
>>615
ちょっと気になるのでもう少しだけ詳しく教えて頂けますでしょうか? >>616
普通に考えれば、ループを抜けるにはループの継続条件がfalseになるように変えてやるだけ
それなのに>>611みたいな質問をするのは、制御構造を無視して強制終了したいとか
考えてるんじゃないかという印象を持った。
普通はそんな必要はないよね。
そんな必要があるのは、デッドロックするバグがある、ソースをいじれないライブラリを利用する時ぐらい。 適切な処理をせずにスレッドを強制的に止めるのは設計がよくないという話、まあ気持ちは分かるけどね その前に終了処理したいのか一時停止したいのかで変わるだろうな >>617
Waitで長時間待ったりしてることもあるから、
こういうのはキャンセルで止めたほうが確実だよ 皆さんありがとうございました
フラグで制御すると無限ループ内のいたるところでgoto文を書かなきゃ行けないので
まずいかなと思っておりました
やっぱりキャンセルで止める方法を調べてみます。
たくさんのご意見大変参考になりました。ありがとうございました! >>617
フラグじゃHttpClientなんか止まらんでしょ
https://msdn.microsoft.com/ja-jp/library/hh551741(v=vs.118).aspx
CancellationToken 使って止めるのが普通です >>622
俺の理解が間違ってるのかな?
確かにCancellationTokenSource使えばユーザーコードなしても実行前のタスクをキャンセルすることは
可能だと思うけど、一旦動き出したタスクを強制終了なんか出来ないと思うけど... 外部exeとかもそうだけどキャンセルするからといってプロセスをすぐ殺す必要はないんだよな
>>623
安全に中断とかでなく止められれば何でもいいんだろ
質問者はもういないしスレ違いの方に行きそうだからその辺でやめてくれ >>623
俺も強制終了はされないという認識
タスク内のコードがトークンのキャンセルフラグチェックして終了処理をする必要があると思ってる 質問者です
強制終了させる必要はなかったので
結局キャンセル入れてタスクのループから抜けるということにしました
↓一部抜粋ですが以下のような感じです。これ便利ですね勉強になりました
Task taskTest = Task.Factory.StartNew(() =>
{
while (true)
{
try
{
cancellationTokenSource.Token.ThrowIfCancellationRequested();
}
catch (OperationCanceledException oce)
{
break;
}
}
cancellationTokenSource.Dispose();
cancellationTokenSource = null;
}, cancellationTokenSource.Token); 例外投げるのって結構コストがかかるんだよな
それでもループ抜けるのに例外使う利点って何か教えて >>626
恐らく問題ないと思いますがcancellationTokenSourceの後処理はfinally{}の中でやると尚良いですね
>>627
try catchを使えば、深い階層でも一気にcatchまで戻ってこられるので、キャンセルなど残りの処理をブッチするのに非常に都合がいい
キャンセルの処理だからこの程度のコストは考えなくてもいいからね
どうしても例外が嫌なら、CancellationTokenのフラグを見て戻る方法もあります >>623
Waitを潰せるから結果的にすぐ止まるんだよ
スレッドのInterruptと一緒だ >>631
Thread.Interruptと一緒ってのが間違い。
その記事にあるように、対応メソッドだけキャンセル出来る。
Thread.Interruptみたいに無理やり止めるわけじゃないから、こっちのが安全。 >>631
最近追加されたメソッドはCancellationTokenに対応したものが多いよ。
それらを使って組めば、タスクをすぐに止められる。 >>631
リンク先のコードは試すまでもない意味不明なプログラムだな
CancellationTokenでのキャンセルは自分でTokenを監視してキャンセル処理を書かないと何もしてくれない
Task作るときに渡しといたからって中断処理をしてくれるわけじゃない
だからこの結果は当たり前
CancellationTokenに対応してるメソッドはTokenを監視してその処理固有の何らかのキャンセル方法を使って処理をキャンセルしてる
Thread.Interruptとは違う >>632-634
だから汎用性はないし、単純なループを抜けるだけなら
コードが複雑になるだけで単純にループの継続条件を操作する方法以上にメリットが
存在するケースはむしろ限られるわけで、>>611に勧めるのは不適切だと思うけど >>636
>>611の無限ループの中身がスクレイピング(>>616)って書いてあるんだから、意味あるでしょ。
HttpClientはCancellationTokenに対応してるんだから。
>>633に書いた通り、最近追加されたのは対応してるの多いよ。 >>637
あ、なるほど納得w
こんな時間にどうも >>632,634
InterruptはSleepやロックを潰すだけだよ
従来Interruptで止めていたようなケースでは、自分でトークンの明示的なチェックなんていらなくて
呼び出し先の時間のかかるメソッドにトークンを適切に引き継ぐだけでいい(キャンセルされたら例外で止まるから)
基本的にスレッドをブロックするだけの同期処理とは違って、
async/awaitの場合は「待ち方」が実装に依存するので、最終的に「待っている」ところに限って
実装者がキャンセル処理を個別に実装する必要がある
そこ以外での扱いの考え方は基本的にはInterruptと変わらんよ CancellationTokenの引き継ぎって明示的に渡さなくてもいいように実装できなかったのかな
一番深いところで例外を発生させるという、たかがそれだけのために途中の全てのメソッドに引数を追加しなきゃいけないのはイケてない
コンテキストを跨るから単純なスレッドローカルじゃ駄目なのはわかるけど、
そこだけSynchronizationContextみたいに手動でstaticプロパティから取ってきて明示的に引き継げばいいだけじゃないのか
それとも意図的に途中で連鎖を切るようなケースを想定してるのかな あーでもキャンセルのハンドリング自体が非同期で行われるようなケースまで想定すると、
トークンをスレッドローカルにしたら無関係な他のジョブにまでキャンセルが伝播してしまうケースがあり得るね
やっぱりダメだな >>643
良くないよ
呼び出した先のメソッドをどうやって止めるつもり?
そうやって、よくある止まらない停止ボタンが出来上がるんだよ 呼び出した先のメソッドの止め方が分からないだけで
フラグでいいよ スクレイピングの処理時間の大半は、レスポンスが返ってくるのを待つ時間と受信処理
CancellationTokenならそれを中断できるけどフラグ処理じゃ手も足も出ない
まあ作っても役立たずのゴミクズボタンが出来るだけだな >>640
従来Interruptで止めてたケースってなんだよ
ここでやってるスクレイピングのためのネットワーク処理はInterruptじゃ止まらないよね?
InterruptとCancellationTokenの類似性って見た目何らかの処理を中断して戻れるってだけでしょ、そんな事は指摘するまでもないし
それ以上は内部実装なども全然違うものだよ
もっと言うとCancellationTokenはキャンセル処理を統一的に扱うインターフェースでInterruptはその実装の一つと見れる
しかしCancellationTokenの実装としてスレッドのInterruptを使っているものは少なくともIO処理ではないでしょう
実際FileStreamのキャンセル実装はwin32apiのCancelIoEx使ってたし
ネットワーク系のもそんな感じでしょ >>647
それと611の処理となんの関係があるの? 昨日はタスクのキャンセルの件ありがとうございました。大変助かりました。
そして、また連日の投稿となってしまい申し訳ありませんが
現在また原因不明の現象に悩まされていて困っております。
もしよかったらどなたか解決して頂けませんでしょうか?
seleniumを使ったプログラムなんですが
一度遷移先でタイムアウトが発生してしまうと
それ以降別ページへの遷移ができなくなってしまうというものです。
そもそもなんでタイムアウトを設定しているかというと
重たいページであっても一定時間すぎたら無条件で次ページへ遷移してほしいからです
どなたか解決方法がわかる方お答え頂ければと思います。
ソースは以下のような感じです
webDriver = new ChromeDriver();
// タイムアウトを2秒に設定
webDriver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(2));
foreach (string UrlString in UrlList){
try
{
webDriver.Navigate().GoToUrl(UrlString); // 一度タイムアウトが発生すると次回以降遷移出来ない
}
catch (OpenQA.Selenium.WebDriverTimeoutException) { }
}
※UrlListには適当なURLがいくつかはいっております
度々すみませんがどうぞよろしくお願いします。 >>649
関係ないと思うなら多分君はキャンセルフレームワークの使い方を勘違いしてるんだろうな
CancellationTokenは同じものを引き回して使うの
受け取ったCancellationTokenを呼び出し先のメソッドにそのまま渡すことで、
キャンセル要求時に処理がどのメソッドにあったとしても関係なく例外を起こして潰すことができる仕組みだ >>651
そんな仕組み誰も提供して欲しくないと思うわwww 自分の質問のせいで争いが起こってしまうとは・・・
申し訳ないです。。 気にすんな
タイムアウトしたら次、ってことはCookieの引き継ぎとかどうでもいいってことになるけど
それなら新しくChromeDriverをnewするって雑なやり方は? はい、クッキーはどうでもいいです
ただchromedriverをnewするとブラウザが新たに立ち上がっちゃうのでなるべく同じブラウザのまま対応したいです >>655
それだけが理由ならPhantomJS使えば済む話じやね あの…WPFとUWPはどっちが速いですか?
優秀な方教えてください >>660
起動確かに速いな
常にスタンバってるのかな >>661
.netと違って、ライブラリの中で使うクラスだけ抽出してスタティックリンクするから
ロードするサイズが全然違いますね >>656アプリに色々スクレイピングしたデータを表示させたいんです >>662
ほえー
アプリ開発者と関係なくUWPがそういう仕組みになってるってこと? >>664
それとPhantomJSじゃ駄目というのとがどう繋がるのか分からん
ブラウザも表示しておく必要があるのか? >>650
お前エロ動画自動収集作ろうもしてるだろ
俺にはわかるぞ >>666
PhantomJSからwindowsアプリにデータの受け渡しをすればいいって事ですか?
タイムアウトの問題を解決するためだけなのにすごく二度手間な事してるような気がしてしまいますが・・・ >>665
まあそんなところ。その他.net nativeだから、ライブラリもCLiじゃなくて普通のバイナリだから立ち上がった後の反応も全然違いますよ class ClassA
{
public override bool Equals(object obj)
{
if (this == obj)
{
return true;
}
else{
return false;
}
}
public override bool GetHashCode() { }
}
static void Main(string[] args)
{
ClassA a1 = new ClassA();
ClassA a2 = new ClassA();
bool b = a1.Equals(a2);
}
GetHashCodeなしだと警告がでるんですが、この場合GetHashCodeのコードはどう書けばいいでしょうか? >>668
いやブラウザが開くのが嫌ならヘッドレスなドライバを使えばいいだろと言ってるだけなんだが >>672
コンストラクタで乱数生成してそれ使ったら? >>672
とりあえず動けばいいだけなら
public override int GetHashCode() {
return 1;
}
でもいい
http://blog.masakura.jp/node/35 便乗で質問だけど、オブジェクトの等価検査で使われる値が変化した時は
ハッシュコードも変えないとまずいよね? >>676
変えなくてもハッシュテーブル系のパフォーマンスが落ちるだけ、それで使わんなら適当でいい >>674 >>675
お2人のレスでGetHashCodeがintを返すものだと気づきました。
いろいろ漁ってみたんですが、this.GetHashCode()の方が1より速いみたいなんでこれで行こうと思います。
レスありがとうございました。 Formアプリで登録リスト一覧みたいなものを表示させたいんですが、DataGridViewみたいな感じにしたい時は何を使いますか? >>673
いえブラウザが開くのは問題ないんですが
タイムアウトが発生するたびにブラウザを開き直すのはちょっと問題があります
なにか他に方法があればいいんですが・・・ >>683
対象のページを手動で開いてるってことか? >>683
対象のページを手動で開いてるってことか? すいません質問がかなり流れてしまってるのでもう一度書かせていただきます
seleniumを使ったプログラムなんですが
一度遷移先でタイムアウトが発生してしまうと
それ以降別ページへの遷移ができなくなってしまって困ってます
そもそもなんでタイムアウトを設定しているかというと
重たいページであっても一定時間すぎたら無条件で次ページへ遷移してほしいからです
どなたか解決方法がわかる方お答え頂ければと思います。
ソースは以下のような感じです
webDriver = new ChromeDriver();
// タイムアウトを2秒に設定
webDriver.Manage().Timeouts().SetPageLoadTimeout(TimeSpan.FromSeconds(2));
foreach (string UrlString in UrlList){
try
{
webDriver.Navigate().GoToUrl(UrlString); // 一度タイムアウトが発生すると次回以降遷移出来ない
}
catch (OpenQA.Selenium.WebDriverTimeoutException) { }
}
※UrlListには適当なURLがいくつかはいっております
度々すみませんがどうぞよろしくお願いします。 お世話になります。
ある二次元のArrayListがありまして、
そのArrayListのある1行だけをまるまる別のListへコピーしたいのですが、
色々調べても書き方がわかりませんでした。
どのように書けば良いのでしょうか。
型は全要素がstringになっているという前提で良いです。 688ですが、一旦質問を取り下げます。
二次元のArrayListではなくて、string配列のArrayListでした。
頭の中を整理してからまた質問させていただきます。 Comparison<T>をIComparer<T>に変換する機能って用意されてないよねやっぱり
デリゲートは拡張メソッドも変換演算子も定義できないし、古典的なユーティリティークラスで
やるしかないのかな そういうライブラリを探す手間が大変
高級言語ってそれが面倒
最初っから当てにしない方が精神的に良いのがわかってても
あるはずだと思って探す >>690
ん?
public static IComparer<T> ToIComparer<T>(this Comparison<T> cmp)
って定義できたし呼び出しもできたけど VS2015 あれ、デリゲートの拡張メソッドって定義できないと思い込んでたけど勘違いか。
ジェネリックの制約か何かとごっちゃになってたかな そんなことするより普通にnew MyDelegateComparer(comparison)でいいだろ
変なごちゃ混ぜユーティリティクラスに依存するよりよっぽどマシ ここでもだれもわからないんですね・・・
どうすればいいんだろう・・・ ASP.NET Identityって要するにユーザー情報やロール情報のリポジトリを注入するだけで認証処理が機能するようになるよって感じ? >>689
ArrayListは過去の遺物だ。
新規で作っているならList<T>を使った方が良い。 いつも思うけど、こういう奴誰に向かって威張ってるつもりなのかね
っていうかそれがそんな偉そうに言うような話かw
馬鹿じゃねえのほんっと >>700
arraylistを使うとどんなデメリットが有るの? >>702
Object型で格納されるから参照する時にキャストが必要。
後、値型だとボックス化が起きる。 >>704
すいません、ボックス化ってなんですか? >>705
https://www.google.co.jp/search?client=android-asus&ie=UTF-8&source=android-browser&q=ボックス化&gfe_rd=cr&ei=b74uWdaaIabz8AeGtomgCg 以下のようなコレクションから、プロパティ「name」「no」が重複しているオブジェクトを全削除したいのですが
Linq等で短いコードで書けそうだなと思いながら、いざ考えてみるとやり方が思い浮かばず困っております
よろしくお願いします
public class TestStore
{
public string name { get; set; }
public int no { get; set; }
public int noctl { get; set; }
}
class Program
{
static void Main(string[] args)
{
List<TestStore> list = new List<TestStore>();
list.Add(new TestStore { name = "hoge",no=2,noctl=999});
list.Add(new TestStore { name = "hoge", no = 2, noctl = 888 });
list.Add(new TestStore { name = "fuga", no = 1, noctl = 888 });
//プロパティ「name」「no」が重複するオブジェクトを削除する処理
//最終的にはname = "fuga"だけが残っているイメージです
}
} >>708
あのさ
自分でもわかんねーコード
人にどうやって読んでもらうの?
少なくとも初心者スレで聞くのはやめろ >>708
list.GroupBy(x => new { x.name, x.no })
.Where(x => x.Count() == 1)
.Select(x => x.First()) >>712
期待通りの結果が出ました
なぜ上手くいくのかメカニズムが解らないので
参考にさせて頂きます
やはり出来る人は凄いですね
ありがとうございます >>709
解らないなら黙ってスルーして良いんだぜ?な? 匿名型ってEqualsも自動実装されてるのか
知らんかった 改めて思ったけど、IEquatable<T>とIEqualityComparer<T>の関係って
なんだかわかりづらいな。
IEquatable実装したらGetHashCodeもオーバライドしろっていうのなら
IEqualityComparerだけあれば十分じゃないのか コンパレータ渡さ(れ)なくても比較したいことは多いだろ >>717
IEquatable<T>は値型に実装するもので、参照型に実装する意味はないよ
一種のマーカーインターフェイスみたいなもんで、これがあることによって
値型のときEqualityComparer<T>.Defaultなどでボックス化を回避することができる >>718
EqualsやGetHashCodeはObjectのメソッドなんだから常に等値比較は可能なはずで、なのになんでインターフェイスが必要なのかが質問者の疑問なんじゃないの?
その疑問はもっともで、実際、非ジェネリックなIEquatableって存在しないでしよ
等値比較できることを示すというよりは、型限定なEqualsの実装を持ってることを保証するためのインターフェイスなんだよ >>713
なぜうまく行くのか自分でもわからんコード仕事で書きたいんだな
アホだな
お前がうまく行くことを祈る C# で 6乗したら100になる数字を求める方法ってありますか?
で、プログラムで 6とか 100の部分を可変で入れ込む関数を作りたいのです。
よろしくお願い致します。 >>724
単に Math.Pow(100, 1/6) でいいと思いますが 桁数に合わせた表示領域の計算とかするのに必要だった気がする >>729
それは Log10 の方だろ
巾乗根なんて日常生活だと複利計算ぐらいしか思い付かんが6年で100倍なんてあり得んし w 工学系なら普通にあるだろうけどさすがに724は理系ではなさそうだし >>726
対数は関係ないよw
x^a^b = x^(a*b)
こういう理屈 クラスの中にスタックを持たせたい場合、どう書くのが正しいんでしょうか。
class Solution {
private Stack<char> st = new Stack<char>();
Solution() {
}
public void pushCharacter(char c) {
st.Push(c);
}
場当たりでこんな書き方をしましたが、とても汚く感じます。 >>734
可読性とかはその人の感性によるものだから君が汚いって言っても他人にはよくわからんかもしれん
もっと具体的に何がどう気に入らないのか説明してくれんと要件満たしてるんだしそのコードでいいじゃんとしか言えない >>733
いや手持ちの数学の教科書の項目の話だった >>725さん
できました!ありがとうございます!
>>728さん >>731さん
お察しの頂いた通り 音関係です。
C#も数学もレベルが低いので苦労しております。
皆様ありがとうございました。 >>735-736
class Solution {
private Stack<char> st;// = new Stack<char>();
Solution() {
st = new Stack<char>();
としました。
汚く感じるというのは、変数を宣言している所で割り当てするのは変なんじゃないかなと思う、ということです。
変なこと書いてすみませんでした。 >>740
宣言と初期化を一緒にするか別にするかはそんなに綺麗汚いに影響しない感じするなー
個人的には統一されてりゃ良いと思うけど
varのこと考慮すれば宣言時初期化のほうが楽なんじゃないかな?ってちょっと思うくらい
(確かメンバ変数もvar使えるようになったよね?) >>740
むしろ初期化できるものは積極的に宣言時に初期化しなきゃ
>>934のコードで疑問に感じる点があるとすれば、スタイルがC#じゃなくてJava
になってる点を除けば、pushCharacterなんていう、スタックを意識させるようなメソッド名が
本当に適切かどうかかね
適切かどうか(そのメソッドを使う時にそれがスタックに対するpushであることを意識する必要があるのか)
はそれだけの情報からは分からないけど、仮に意識する必要がないのであれば
そのメソッド名は考え直した方がいいかもしれない >>739
セント計算を20年ぐらい前にした覚えがあってね >>742
メンバ変数にvar使えるようになったってマジ?
聞いたことないんだが フィールドは基本的にreadonly + 宣言時代入
どうしてもreadonlyにできない場合は宣言時代入はまあどっちでもいいと思うよ
ミュータブルなフィールドを宣言時代入するのは意味的に紛らわしいと感じる人もいるはず すみません。質問です。
通常のメソッドから非同期メソッドを呼びだす時の場合です。非同期メソッドは無限ループで非同期受信を待機しています。
(async/await)
この時通常メソッドの中の非同期呼びだしが、await演算子を適用することを検討してくださいと警告をうけます。
非同期メソッドの呼びだしにawaitをつけたほうがいいのでしょうか ようわからんけど、Clickイベントハンドラにasyncつけるとか?
することあるよ >>747
awaitしないなら戻り値のTaskを受け取って何らか処理しないとタスクが宙ぶらりんになる
結果を受け取る必要がないTaskかあるとしたら、それはあまり良くない設計 >>747
無限ループじゃなくてawaitで待つほうが健全だね >>747です
レスありがとうございます。何がしたいかというと
誘導失礼します
http://hensa40.cutegirl.jp/archives/1858
これのサーバー側を非同期で常にアクセスを待ち続けたいのですが、色々と例外が発生してうまく組めません。どの様にコーディングすればいいでしょうか。 >>753
サーバーで複数クライアントからの処理を同時にこなすならawaitしないのは全然普通だよ
コンパイラの警告は基本全部つぶすべきだけどその警告は場合によっては無視していい
複数クライアント対応のサーバー側の処理の骨格は普通以下のような感じ
疑似コードみたいなもんなので当然このままじゃ動かない
さらにclientWorkerで例外が起こった場合を考えるべきだけど
https://ideone.com/Xbn7g0 > さらにclientWorkerで例外が起こった場合を考えるべきだけど
なのでawaitじゃなくてTaskのまま受け取ってContinueWithでエラー処理とかする
警告もなくなる >>754
いや複数リクエストを同時に処理するためのasync/awaitだろ
awaitはContinueWithに相当する操作なんだけど、なんか勘違いしてないか ああリンク先見たらwhileの中でawaitしないことを言ってたのか
失礼した async/await使った非同期サーバー作ったけど、ネットにろくな例無くて苦労したわ
未だにこの表記で良いのかと考えるときあるし >>754
ありがとうございます
とりあえず以下のような感じでやって動いてはいるんですが、大丈夫でしょうか
ただ、listener.Stop()を実行すると、System.ObjectDisposedExceptionの例外がスローされます
対処方法はどうしたらいいでしょうか
public void ServerStart() {
listener.Start();
LoopTestAsync(); ←警告される
}
public void ServerStop() {
listener.Stop();
}
private async Task LoopTestAsync(){
While (True){
using (TcpClient client = await listener.AcceptTcpClientAsync()) {
clientWorker(client);
}
}
}
private void clientWorker(TcpClient client) {
using (var stream = client.GetStream()) {
IFormatter formatter = new BinaryFormatter();
Class1 c1 = (Class1)formatter.Deserialize(stream);
}
} >>759
当たり前じゃん
無限ループのSTOP処理考えろよ iTunes、UWPアプリ化。マイクロソフト本気でストアアプリ強化へ
http://www.ask-mswin.com/news-170513/
これいつだよ
C#で作ってるのかな 正直、タッチパネル搭載のPC使ってるけどUWPなんてほぼ使ったことないw
これからもまず使わないだろう
モバイルのシェア1ケタのOSのモバイル用アプリなんて生まれる前から死んでいるw >>766
そういう重箱の隅をつつく話はしてないよww
ほぼ、って言ってるでしょ
それを言うなら、Win8の時代からある立体上海みたいなゲームもやったことあるよw っていうか、あの設定画面出てくるとゲンナリするよねw
コントロールパネルと設定画面がどういう基準で仕分けされてるのかさっぱり分からんし、
そうでなくても糞見づらいフラットデザインの画面ってイライラしてくる >>768
「これからもまず使わないだろう」って書いちゃったよね恥ずかしいよね
てかなぜUWPの話でWin8が出てくる? >>768
ろくにUWPを理解していないことが露呈しましたね >>772
幼稚だね。小学生か
普通UWPを使うって言ったらストアからダウンロードして使うか、
少なくとも最初からインストールされているアプリを、他に選択肢があるにも
かかわらずあえて使うことだろう。
Windowsを使う限り使うことがほぼ選択の余地なく不可避のものを
「ほらみろお前使ってるじゃないか」ってそんなこと言って何の意味がある
馬鹿じゃねえの >>774
そんな幼稚なオレオレ定義知らねえよwww
Googleって便利なものがあるからしばらく勉強してこいカス >>774の定義ではWindows8はUWP対応なんだってさ >>774
焦点はUWPを使っているか使っていないかであって、ストアだの代替アプリだのは関係ない
無知を晒して恥ずかしいねえ >>778
君のような奴って幼稚な自分が嫌にならないんだから幸せでいいよね。
しかし、いちいち他人の揚げ足をとって言い掛かりをつけないと気が済まない馬鹿って
普段実生活でどういう人生送ってるのかね。
俺ならそういう自分に耐えらんけど
Taptiles(名前忘れてたが)はWin10になった段階でUWPにリメイクされてると思ったけど、
今起動してみたらこれストアアプリのままか、
全画面でないと動作しないのな。 明らかな間違いなのにそれを指摘されたら揚げ足取りだって喚くとか、こいつ技術者ではないだろ。
ID:JeVIxJYz 呼び方がわからんが、いわゆるMetroアプリは標準を除くとLine、Nebo、Wunderlist、おためしでMicrosoft Todoぐらいか
DesktopConverterだと、CrystalDiskMark、Slack、NuGet Package Explorerかな
と思っていま見たら、楽天カードアプリがあったので入れてみた
こういう、スマホはアプリ、パソコンではスマホみたいになってたやつはUWP出てくるかもしれんね
セキュリティ的にもそのほうが安全だし >>781
知ってるはずだと思うけど、Metroって名称はWin8発売前に撤回されたでしょ >>779
まだ自分が何を指摘されたのか理解できていないようだね、お馬鹿さん
いや、理解したから揚げ足取りだなんてアホなこと言って逃げたのかな? >>782
知ってるはずだと思うけど、UWPってフレームワークはWindows10以降でしょ >>783
幼稚な馬鹿に何を言っても無駄だけど、「ほぼ使ったことがない」という発言をしたのは
俺自身なんだけど。
俺自身がそれをどういう意味で言ったのかを何でお前が決められるわけ?
ほんっと馬鹿にも程がある。しかも幼稚ときてる。
人間として終わってるね。俺がお前なら朝一番で電車に飛び込むレベルで >>785
わかるよ、即効で反例出されて顔真っ赤なんだよね >>785
ここは初心者スレなんだから正しい知識を教えられたら素直に受け入れたらいいんだよ >>787
そうだな君が馬鹿で幼稚であることは素直に受け入れてるよ
設定画面がUWPでないと言った覚えも、それを使ったことがないと言った覚えもないけどね。
まあ人間的に幼稚な奴を相手にしても腹が立つだけで得る物がないからこれで終わり >>788
「それを言うなら、Win8の時代からある立体上海みたいなゲームもやったことあるよw」 >>782
それはわかってるんだけど、Desktop Converterの登場でなんて呼べばいいのかわからなくなってしまった
非Desktop ConverterのUWPだけを指す呼び名って公式でなんかあったっけ? >>789-790
横からマジレスすると
もうオワコン過ぎて絶対増えて行かないと思うよ
どうしたんだろうね
昔は書籍とかたくさん書く人いたのに(普及するようにお金撒いてたんだと思うけど)
今じゃそれもなくなってな >>794
完全に消滅状態のUWPになにか主張したいことがあるの? >>793
マジレスと称してまたトンチンカンなこと言い出しててワロタwww >>796
なんで?
uwpについてなにか言いたいことあったんじゃないの?
ないならもう完全消滅で全会一致ってことでもうこの話題はいいよね?
あとは誰の発言がどう補正されようが完全消滅の事実は消えないんだからすべてが誤差 別にこの話題を続けたいならいかにuwpがオワコンであるか俺のリサイタルを聞きたいと言うならそれでもいいよ >>798
どこを読んだらそうなるんだ?
お前も即効で反例出されて逆ギレしてたキチガイの仲間か? >>800
だからどうでもいいって
どうせ誤差だし >>801
uwpから?www
uwpオワコンネタは俺の大好物だからね UWPなんて触る機会来るのかな
うちはレガシーの保守拡張がメインの三流企業だから
やるとしても5年後、10年後とかになるかもしれないな
ドキュメント残しておいてくれよ 2020年のWindows7終了祭りでWindows10が標準になれば
圧倒的なスピード差でUWP採用されやすくなるだろうね
今でもGUI部品は圧倒しているし、.net Coreが充実してくれば入れ替わるな >>806
あ、デジャヴwwww
なんのときだっけ?それ
結局.net framework 2.0のままだけどな! >>806
WPF「…俺たちは?」
UWP「…実験台?」
真のユニバーサルアプリ「旧世代のゴミどもめ!!」 Win8ストアアプリはWin8.1出た時切り捨てて、Win8.1ストアアプリはWin10出た時に切り捨ててるからね。。。
せいぜい2010まで切り捨てないで欲しいわ。
それまでは信用出来ない。 Win8.1出たらWin8ストアアプリ新規で出せなくなったりね。
開発する側は開発環境新しくするだけだけど、雇ってる企業はその度に買い直しを迫られたろうし、一番可哀想だったのはストアアプリのプログラミング本出してた出版社だったな。
あんなにコロコロ変えられたら出版費用回収出来なかったろう。 ペゾルドもUWPの本は書いてないw
さすがにふざけるなってなるよねw Win7以前のフォームアプリすべて切り捨てたら4Kディスプレイでスケーリングがまともに使えるようになるんだがな >>817
スケなんかできたところで金になんねーだろ
誰が喜ぶんだよ?
入出庫管理アプリ作ったとしてピンチインピンチアウトなんてお客がやると思ってるの?
オメーがエロ画像見てるときぐらいだろそんなの必要なのは 横からだがスケーリングは高解像度でもフォントが綺麗な方向だと思うぞ。
入出庫管理ならAndroidなりWinなりの8型タブにバーコードリーダー繋げてた方が便利だろ。
今時タブのが高解像度だが、Formsのままだと高解像度だと文字が読みにくい。 入出庫管理なんかどうせ固定画面なんだからどうでもいい
フォントをでかくすりゃいいだけ >>817
そんなくだらねーもんのためにフォームアプリの全廃を願ってるってのが狂気だよね UWPはC#でありながらC++並の表示速度が有って、
更にソース丸見え問題が仕組み上解決されている
windows10専用が問題なくなる3年後には、
C++を上書きするポテンシャルが有るよ 高dpiモニターは医療とヲタ向け以外あんまり需要なさそうな気はするね
コモディティー化したらどうだかわからんが
UWPって現状所詮ストアアプリと同じサブセットじゃん
標準の.NETの方がUWPの要素を取り入れることはあってもUWPが
デスクチップアプリを置き換えるとか100%ないわ >>826
よく分からん。具体的には何の機能が問題無の?
DataGridは買ってくれば問題ないし >>827
いや、UWP勉強してないんでどういうコントロールがあるとか知らんけど、
少なくともライブラリはサブセットでしょ
フルの.NETのライブラリ(BCL)の上位互換じゃないよね データグリッド使うようなアプリはWebへ行くわな
今更またいつ投げ出すか分からん新技術に賭けるリスクをペイできない UWPってスタンドアロンなアプリはゲームくらいのもんで、
基本的にはWebサービスのフロントエンドを作ることを想定したプラットフォームだよ
今の時代バックエンドとしてWeb APIがあるのは当然で、
その上で薄い薄い上っ面をUWPで作るかWebブラウザで作るかという程度のどうでもいい話でしかない
WinForms対WPFとかやってた頃とはもうアプリの概念そのものが全然違うのよ なるほどこれからは電卓アプリも端末は画面だけ用意して
実際の演算はネットの向こうに投げるようになるのか胸熱だな >>831
そんな程度の低いアプリは金を産まないから
ビジネス的な観点で言えば無いのと一緒だよ >>830
uwpにwinformやwpfの代わりはできるの? フロントエンドはブラウザのHTML5で決まりみたいなもんだろ
どうしようもないぐらい差がついてる
もう終局してもいいレベルだからな
グラフコントロールすらないUWPに何ができるんだか >>834
いや、なんかmsがuwpで統一みたいなこと言い出したんよ >>835
VB6 winforms webをWPFで統一って言ってたくせに実現できなかったMSが偉そうに いやだってこれアプリの製作方針すべてに関わるで
勉強してることが無駄になりかねない 【マイクロソフト研究所】Win32からUWPへ――、アプリケーションの移行を進めるMicrosoft - クラウド Watch
http://cloud.watch.impress.co.jp/docs/column/microsoft/1056615.html
問答無用だぞ >>838
だったら悪いこと言わないからWebへ行きなさい
あと、アプリ開発だけじゃなくてAWSかAzureを使えるようになっておくといい
引く手数多よ >>841
さすがに書き換えるコストに見合わないだろ Officeもなんだかんだでクロスプラットフォームなもんでコア部分のC++実装の共通化に注力してるって話だし
モバイル版も普通にC++ベースなんじゃねのん C#勉強してるんだけど、デリケートがいまいち理解出来ない。。デリケート使えば便利なのは分かるけどこれを使わないと実現出来ない場面ってどういう時? >>845
デリゲートな。
初心者ならまず使わない。ラムダ式にしとけ。 >>845
ネイティヴAPIにコールバック登録する時とかかな
たしかデリゲートじゃないとできなかったはず >>849
それはどういう時に引数に値(例えば整数)を入れてメソッドに渡したいか、と同じこと
それと、なんか上でトンチンカンなこと言ってる奴がいるけど、ラムダ式はデリゲート型の値を
記述する方法のひとつだから、勘違いしない方がいいよw >>845
汎用的に使用できる定義済みのデリゲート型は?[C#、VB] − @IT
http://www.atmarkit.co.jp/fdotnet/dotnettips/730dlgttype/dlgttype.html
↑こういう便利なものがあるので、自分で直接delegateを宣言して使う必要はめったにないけど
Action だの Func だの使ってるときはデリゲートを使ってることになる ICallable的なジェネリックインターフェースと匿名クラス自動実装の糖衣構文ではダメだったのかな
デリゲートを言語機能で用意する必要はあったのか >>852
最初から有ったデリゲートを、後から出来た糖衣構文で代用って デリゲート自体を勉強せんでも
LINQにラムダ式放り込んでたら理解できるよになると思う >>858
Visual Studio 2017のインストールオプションで見かけたけど >>852
Javaのアレは@FunctionalInterfaceをコンパイラが直接認識してたり
メソッドハンドルを使った実装をランタイムが自動生成してたりして正真正銘の言語機能だよ
キーワード増やしたくないのと既存コードとの互換性のためにああなっただけ
まあマルチキャストとデリゲート型宣言は失敗だったけど デリゲートは関数をいれる変数
ラムダ式は文字通り式
全然別物
>>858
開発終了 個人的にはラムダ式よりデリゲートの方が理解しやすかった
ラムダ式はまだまだわかった気になってるところがある >>845です
皆さんありがとう。
デリケートって書いてた。これは恥ずかしい。。
formアプリの場合、invokeメソッドを使うときはデリゲートを使わないといけない。それ以外は必要に応じて。という認識で大丈夫ですか?
task内で呼びだすメソッドをデリゲートで行う必要はべつにないですよね? >>864
直接当てはまるものはない
デリゲートは単なる関数ポインタではなく、ターゲットのオブジェクト参照を持っていて
インスタンスメソッドを呼び出すことができる
元ネタはDelphiのメソッドポインタ >>863
(説明が100%正しいか自信はないけど)つーか、デリゲート自体は変数と同じようなもので、
値を格納するんじゃなくてメソッドを格納するための型。C#のイベント機能もデリゲートを
使ってるし、意識する・しないに関わらず、デリゲートはあちらこちらで使われ、色々使える
メソッドを変数のように引き渡せるなら、クラス内の特定の処理を自由に差し替えたりできる
でしょ?たとえばあるクラスで、そのインスタンスを作った際に外部からメソッドを渡してやる
事で、インスタンス毎に異なる処理をさせる事ができたりする訳
ただし今はラムダ式など新しい記述方法が出てきていて、コード中でdelegateというキーワードを
使ってデリゲートを定義する機会は少ない ありがとうございます
まぁこんな状態なので継承やインターフェースもうまい使いどころが分かっていないんですが。。要はまず習うより慣れろですかね
プログラムを作っててこういうことが出来れば便利なのに!を感じた時に使いどころを覚えていきます >>845
>>863
疑問に思ってるのは
「いちいち変数介して実行せんでも直接呼び出して実行すればいいじゃない」っていうことに見えるけどあってる?
invoke使わないといけないような場合は使いますけど…という
つまり、デリゲートなりラムダ式なりでわざわざ処理内容自体を渡す利便性って具体的になんだべ?ってことかいな >>871
ありがとうございます
まさにその通りです
まだそういった場面になってないからそう思うだけだとは思うんですが使いどころがいまいちピンとこない感じです。。
サンプルプログラムを見ても、ん?普通にメソッド呼びだしたほうが分かりやすくね?みたいな >>872
クラス作成側と使用側が別れてる場面に当たらないと難しい
先頭ノードのみ公開されてるツリー構造のデータの
ノードのすべてを辿るメソッドの引数はデリゲートだと楽そうじゃない?
って言ってわからないならとりあえずまだいいんじゃね?的な 変数なんて使わないで直接数字を書けば良くない?
みたいな まあ、Formの中に全部の部品ぶちこんで、すべてのコードもぶちこんで、それですんでるうちは
継承だのインターフェースだのデリゲートだの小難しい事はあまり意識しないでもすむよな
ただ、プログラムの規模が大きくなって、だんだんスパゲティ化してきて処理をすっきりさせたい、
分けられる所は別のクラスに分けたいとか考え始めた頃に、ありがたみがわかってくる >>872
いきなり「この技術を自分のコードにどう取り入れるか」から入ってるからイメージ湧かないんじゃないかな
LINQは知らないの?
あれは初心者でも小手先で使えて、しかも便利な上に
「処理内容を渡す」という仕組みの便利さも実感出来ると思うんだけど
ラムダ式も、直接ラムダ式を調べるんじゃなくて(デリゲート知ってる人向けの説明ばっか出てくる気がする)
LINQのサンプルから入った方がイメージしやすいかも
継承やインターフェースなんかは「使う側」としてはもうすでに使いこないしてるはず
ListでもArrayでも、違うクラスなのにForEachで同じ書き方して列挙できるってのはまさに
インターフェースの機能だし
他にも無意識にインターフェースや継承の機能を使ってる場面はあるはず
つまり、.NETのライブラリで実際にその技術を使って設計されてるクラス使ってみて
「それがどういう仕組で動いてて、なんで便利に使えるのか」からアプローチした方がイメージ湧きやすいかも
同じ機能を持つクラスを自分で実装しようとしたらどうなるか、とかね 関数を変数として扱えると、関数やクラスに引数とかメンバ変数として渡せるんだよ
たとえば朝6時になると何かアクションを実行してくれるクラスがあるとして、
そのクラスにアラームを鳴らすって関数を渡しておけば目覚ましになるし、
録画開始する関数を渡しておけば予約録画機能になる
元のクラスは変更せずに、渡す関数によってあとからいくらでも簡単に機能が追加できるから便利でしょ >>872
例えば親フォームのメソッドを小フォームのダイアログなんかのデリゲートに突っ込んでやる
そうすると、メソッドは親フォームのクラス所属だから普通に親フォームのコントロールやプロバティーに簡単にアクセスできるが
小フォームから簡単に呼び出せる
ダイアログで親フォームのデータ更新するときなど便利に使えるよ 一般的に「制御の反転(IoC)」と呼ばれる考え方だよ
構造化プログラミングでは通常、呼び出す側が何を呼び出すかを決めており、呼び出す側は呼び出される側に依存する
これをボタンのクリックイベントに置き換えると、
ボタンがフォームの特定のイベントハンドラに依存することになる
これだとフォームごとに別のボタンクラスを作らなきゃいけなくなるだろ?
それを避けるために「移譲」と呼ばれるテクニックを使い、呼び出す側(ボタン)に呼び出される側(ハンドラ)を渡す形になるように制御を「反転」させる
これでボタン側は共通にできる >>875
俺社環の話になるけどユニットテスト義務付ければ、糞長い何でもぶち込みコードを撲滅できるのかな >>875
規模関係なくない?
あくまで内部が触れない仕組みだよね >>877
それだと理解できないと思うな
だってタイマー判定してる箇所に処理書けばいいじゃん
あくまでその処理が触れないからデリゲートが意味を持つんだよね? >>881
もちろん、ライブラリの呼び出しもこういうスタイル 配列.sort(compareFunction)
ここで引数に、ソートのやり方を渡せば、色々な順番で、ソートできる
例えば、abcd など文字の順番とか、
文字列の文字数が少ない順番とか、
様々な定義ができる
関数も関数オブジェクトに出来るし、
ラムダ式・クロージャも、オブジェクトだから、
これらはすべて同じで、引数にはクラスを渡していると考えればよい だからマイクロソフトが提供するapiなんかでこう使うんですってのじゃないとお目にかかる場面は少ないと思う
自社のソースだと作業者毎の縄張りとかないからこんなの作ったらドキュメント必須だね
面倒なので誰もやらんと思う >デリゲートの質問者
だから、デリゲート型の変数が使えるメリットは
例えばint型の変数が使えるメリットと同じだってば
もしintがリテラルしか使えなかったら、任意の自然数を引数にとって素数か判定するメソッドは書けない。
同じようにデリゲート型の変数が使えなかったら、例えばLINQのWhereみたいに
要素をフィルターする条件を引数に取るメソッドも、ListなんかのSortみたいに
2つの要素の大小関係を決める方法を引数に取るメソッドも書けない >>865>>866
ありがとうございました。
十年来の疑問が解消しました。 >>845です
皆さんありがとうございます
指導頂いた見解として、ある箇所で必ず何かしらの処理をする(コールバック?)時に、その処理が確定的でないならデリゲートを利用して行う処理を渡してあげる
その処理が確定していて後々の拡張を考えないなら直接呼びだすメソッドを書けばいい(こう思ってる場合でもデリゲートを利用するメリットがあるのか??)
ってところでいいですか?
LINQはまだ使ったことないので今から勉強してみます。 >>888
そんなんでおkだと思う
わざわざクソな造りにする意味はない 一定時間ごとにテキストボックスにメッセージを表示する方法が分かりません。
textBox1.Text = "";(空状態)
Thread.Sleep(1000);
textBox1.Text = "A";
Thread.Sleep(1000);
textBox1.Text = "B";
ThreadSleep(1000);
textBox1.Text = "C";
とすると、空の状態から一気にCになります。
順番に表示するにはどうしたらいいでしょうか。 >>891
C#固有のやり方は知らなくてすまないが一般的にそういう処理は別スレッドでスリープしながらUIスレッドにメッセージを投げて処理する >>891
Thread.Sleepをawait Task.Delay に置き換えるだけ それ途中でユーザーがウィンドゥ閉じたらどうなるの? >>891
ごめんちゃんと読んでなかったw
間にtextBox1.Update();かtextBox1.Refresh();を入れる ログ表示で俺もやったことあんな
textbox1のメンバにappendなんたらってあったような希ガス >>880
全てのユニットテストを義務化すれば撲滅出来ると思うが、コード側を相当修正しなければならないハズなんで、かなり大変だよ。 C#6から構造体のコンストラクタの中もでプロパティを初期化できるように
なってたんだな(VBは昔から可能だった)
ついさっき初めて知ったよ。
どうでもいい独り言でした 突っ込まれる前に
C#5まででもデフォルトコンストラクタを呼べば一応可能だった WindowsFomアプリのUIに使うフォントって何がオススメ?
ちなWindows7機で 必ず入っているフォントなら見込み違いの表示崩れとか無いしな 普通に日本語ならUIゴシック、英語圏ならTahomaでいいでしょ。 ありがとう
意外にも普通な回答にびっくりだけど
よくオススメのフォントにあるメイリオはなんかUIにはたるんだ感じがしてしっくりこなかったのよね XP切り捨てでよければ(さすがにもういいかもしれん)メイリオでもいいかもしれんけど、
さすがにメニューやドロップダウンやグリッド系には使いづらいね >>908
最近osの拡大率設定が125%とかなってて昔作ったもん全滅だった
見込み違いはないかも
さらにPC新調してから作ったものは125%でしか正しく表示できなかった Win10時代だし、UWPで作った方がいいんかねぇ・・・
WinFormが便利過ぎて移れないw WPFもストアアプリも途中でぶん投げた今しばらく様子見ムード? これからはWPFの時代だよ!って言ってたのに、
あっさりUWPにしろって言い出したしなぁ
しかもUWPはシリアルポートとかの情報が少ないのがネック デスクトップアプリをUWPにしろなんて言ってないでしょwww windows10 Visual Studio2017 C#でボタンを継承したカスタムコントロールを作ったのですが
実際にフォームに貼り付けてデバッグを開始したところ
フォームのInitializeComponentにおいてNullReferenceExceptionが発生してしまいました。
他の自作したカスタムコントロールでは発生しないので、まったく原因がわかりません。
実際に発生するコードは下の行です
this.buttonEx1.CorrectResponseColor = System.Drawing.Color.Empty;
buttonEx1 がnullであると言われてしまいます。
どなたか原因は分からないでしょうか >>918
buttonEx1 がnullであるってちゃんとbuttonEx1=new 〜で作っていないんじゃね?
あとはその継承した内容見ないと分からんよ InitializeComponentより後ろに書け >>918
原因を調べて欲しいんならソースコード全部出せ >>917
いや、そう見える
【マイクロソフト研究所】Win32からUWPへ――、アプリケーションの移行を進めるMicrosoft - クラウド Watch
http://cloud.watch.impress.co.jp/docs/column/microsoft/1056615.html
問答無用だぞ >>923
よく読め
>なお、デフォルトでは「任意の場所からのアプリを許可する」に設定されているため、
>今までと同じようにすべてのアプリケーションがインストールできる。
>すぐにWin32アプリケーションが利用できなくなる、という話ではないので、その点はご安心を。 っていうかフラットデザインをデスクトップでもごり押しするならもうWindowsなんか使わんw そりゃマイクロソフトとしちゃあ、UWPへの移行を促進したいのは山々だろうが、
笛吹いてみんなが付いてきてくれるかどうかだからな
マイクロソフトの持つ笛は、随分と昔に魔力を失ったように思えるが
まあ中身は実質Win32のなんちゃってだってUWP扱いだそうだから、それも含めて
いいんだったらねw >>924
殺る気マンマンだろソレwww
ていうか逆に退路を残してあるのが信用出来ない
当然だけどある程度UWPのユーザが増えたら旧環境は切り捨てなんではないだろか?
んでやっぱり流行らなかったり方針を変えざるを得ない流れが来てしまったら
UWPも残念だったねと
世界のみんなの多数決次第? >>926
次のアップデートでまた新しいデザインシステム推してくるから大丈夫(?)だ そういやCommunity toolkitのロードマップだと、今月中に1.5リリースとなってるな(今は1.4) 業務クライアントアプリはもうこのままWinFormsと心中させてあとはWebへどうぞという感じなんだろうね UWPもWPFも作るにあたってそんな変わらなくない? >>926
次のFluent Designもフラット。
さようなら。 フラットデザイン俺は好きだけどね
でも用意されたコントロール使ってもフラットになんねーのにイラッ >>923の記事タイトルがミスリードっぽい
exeからappxへと書いてくれれば分かりやすいのに tryのブロックにint i = "string";と書くと
catchに移動する前にデバッグすら出来ないんですが
tryに書けるエラーの基準とかあるんですか? >>936
tryより上で宣言して初期化してください
この時はvarは使えませんが >>936
それはコンパイルエラー
間違っていることが明らかであり、試しに動かしてみる価値すらないゴミである
出直してこい、といわれて動かす前に門前払いされている状態
tryはそのエラーとは全く関係ない >>937
事前に宣言は必須なんですね
>>938
実行時エラーってやつと区別されてたんですね。勉強になります。
返信ありがとうございました。 >>936
そんなあなたに
varを使ってみてはいかがでしょうか?
intをvarに変えるだけであら不思議! int i = "123";がコンパイルできないc#はクソ
みたいなスレがこの先バンバン立つだろうw >>935
ミスリードじゃねぇよ
普通に大手とかドメイン環境でwin32禁止来るだろ >>943
わざわざ入らない入れ物に突っ込むとかプログラマ以前にキチガイ
>>936は throw new ApplicationExceptionが欲しかったんじゃないのか 今更>>923の記事読んでみたけど、普通に考えて無理筋だね。
ほとんどのユーザーに面倒を強いるだけでメリットが少ないUWP化なんぞ進むと思えない。
MSの偉い人はこんな計画が本当にうまくいくと思ってるのかな。 win32の上に乗ってる.net framework
その上に乗ってるUWP
win32叩きは異常 もっとも重宝されてるフリーウェアをUWP化すればお金入る? UWPは.Net Frameworkの上に構築されるものではないのだが… >>950
需要ない
UWPアプリを使う(とMSが想定している)ような層にアプローチするなら
UWPよりもWebサービスにした方がいい o UWPのAppModel特有のローカルへの制限が厳しい。
かなり緩くなるとはいえDesktop Bridgeも例外ではない
o XAMLの好き嫌いはともかくとして、用意されている標準コントロールがクソゴミ過ぎる。
見た目、機能性、数のすべてに置いてウンコな廃棄物でありキーボードサポートなど貧弱の極み
o スマホアプリのようにWebサービス+APIのクライアントとしてなら有効な選択肢にもなるが
PCの場合Webサービス+ブラウザで済んでしまう
絶望しかない… 同感
ネイティブとWEB版を足して10で割ったくらいの残念機能 >>947
いや、コンバートのことを言ってるんじゃなくて
他の人も書いてるけどそもそもUWP自体のメリットがないとは言わないがかなり微妙...
ところでしょうもない質問だけど、C#のデストラクタってFinalizeを
オーバーライドするのと何が違うんだっけ? ただの構文糖だからなんも違わない
混乱するだけだから採用しない方が良かったと言われ続けている負債である FinalizeはオーバーライドすることでGCによるインスタンスの扱いが変わる特別なメソッドなので、
言語上も特別扱いすることはそれなりに理にかなっている
C++のデストラクタの構文を借りたのはクソだけど >C# で書いたデストラクターは、コンパイルすると Finalize というメソッドに変換されています。
>なので、デストラクターとは別に Finalize という名前のメソッドを書こうとすると、コンパイル エラーになります。
ホント酷い >>953
使ったことない人にはそう見えるかもしれんね
実際にはCommunity Toolkitという公式の拡張でコントロールは豊富だし
何と言っても.net nativeでの高速化と難読化要らずは代えがたい
あと、フリーウエアの場合に配布が容易なこととアンインストールが簡単なのもポイント高いよ >>960
影だけレイアウト無視して配置されるDropShadowPanelや
ちゃんと丸め処理してなくて特定の幅で突然レイアウトが崩れるAdaptiveGridViewなどなど
ばぐまみれのUWP Community Toolkitがなんだって???
まあ修正しながら有難く使ってはいるよ
それはともかくTemplate Studioやら最近になってようやく標準コントロールの
絶望的な貧弱さをどうにかしようという動きがあることは理解してるよ
この程度の実装ですらコミュニティ頼りなのは気に食わんが
https://blogs.windows.com/buildingapps/2017/06/02/toolkits-toolkits-toolkits/
https://www.microsoft.com/store/apps/9nblggh4tlcq
https://www.microsoft.com/store/apps/9n3fgcz50qnl
今後目指していくのであろうこういうのも嫌いというわけじゃないのよ俺も
https://www.microsoft.com/store/apps/9pp1sb5wgnww
> 何と言っても.net nativeでの高速化と難読化要らずは代えがたい
> あと、フリーウエアの場合に配布が容易なこととアンインストールが簡単なのもポイント高いよ
そうだねユーザーもデベロッパーも笑顔になれる素晴らしいメリットだね、何もかもが駄目とも思ってないよ
でもその前にメリットへの導線をごっそりと引き千切る現実的なデメリットが如何ともしがたいという話なのよ コンバーター使いにくそうね
開発者モードにせずにexe右クリックしてコンバートとか
できないのかね 側だけ見ればUWPのメリットは結構あるから、msがどこまで本気で取り組むかだよな
>>928
VB6さえ動作させ続けるmicrosoftが何を切り捨てるって?
機能拡張は止まるかもしれんが >影だけレイアウト無視して配置されるDropShadowPanel
影で内側の大きさが変わる方が遥かに扱いにくいよ
どう見てもバグじゃなくて態々そう作ってあるんだよ
あんたが検索したサイト主の感性に合わなかっただけでしょうねw >>966
http://i.imgur.com/tPi2O6e.jpg
これが仕様通りってんならもうこちらから申し上げることはございませんわ カスタムコントロールにnullReferenceExceptionがでて困ったので質問したものです。
解決しました。
コンストラクタをPublicにしていなかったのが原因でした。 >>967
パラメータをセットしないとうまく動かない程度が致命的欠陥には思えない
それと影だけ云々の方は引っ込めるのかな? 単なる自分の好き嫌いを普遍化してしまうのは他山の石 >>961
標準のメールアプリやEdge見て思うんだけど、
Microsoftは自社製UWPアプリをもっと作り込むべき。
その過程で様々なUI要素やAPIが必要とされ充実してくる。 >>974
Windows8.1以前でも動くんだからそんなこと聞かなくても分かるでしょ Excelってまだ32bitアプリを互換モードで動かしてるの? 何年か前は64bitExcelは32bitの拡張プラグインを動かせないからMSが32bit推奨してたけど今は64bitのみになったのかな のみだったら32bit環境じゃexcel動かなくなるけどw マクロ互換無いからMSも64bitそんなに推奨してなかったような
実際動かなかったから32bitインストールし直したし 確かそんな感じだったね
でも、どういう仕組みか知らんけどオートメーションに関しては
32bitのコードから64bitのエクセルを操作することも、64bitのコードから
32bitのエクセルを操作することも可能で、その辺はよく出来てると思った オートメーションはプロセス間通信がそのへん吸収してるから。 >>971
誰も致命的な欠陥なんて言ってねえしなあ
俺だってこんなささやかなライブラリの些細な不具合でネチネチ言うのは本意じゃないんだがね
不具合すら認めらない人が居てこんなにしつこいとは思わなんだよ
> それと影だけ云々の方は引っ込めるのかな?
影だけ云々って部分を勘違いしてるようだからわざわざスクショしたのに
そこすら伝わってねえとかバカも大概にとけ
コンテント置いてきぼりにして親の影パネルが配置されるから影がずれるって言ってんの >>983
COMのアウトプロセスサーバーは32/64bit統一不必要だけどインプロセスサーバーは統一が必要だね >>987
影をアニメーションさせる時、君の考える仕様だと本体の大きさが影の大きさの影響で変化しちまうよね
影が動くのは光源が動くことだから本体は動いちゃいけないんだよ
だから現在の仕様が正解で君の指摘は的外れです >>989
idl だなんだでそれなりに使われて積み上げてきた rpc 関連技術も今や昔
単なる http で xml 渡したり jsonp したりなんとも後退したもんだよね >>990
いやこのケースはそんなこと言ってる奴は死刑にして欲しい >>992
だから目が見えない人には優しくしろってば 言語習得するにはやはり参考書の1つや2つ必要?
ネットの情報だけで乞食するにはいつか限界がくるかな 学ぶなら公式のドキュメントを読めば十分
どうしてもわからないときやピンポイントやりたいことがあるときには
そのトピックについて検索してネットの記事とかに頼ればいい
十分は言い過ぎにしてもとにかく公式のを読むこと。 細かい内容になるとリファレンスが殆ど英語だからなぁ
英語アレルギーにとっては苦痛 >>997
リファレンスの英語なんてsetとgetぐらいじゃね?
あとの単語は記号 技術系の文章なんて文法的には中学英語で十分読めるよww
使われる単語数も知れてる
英語学習てw このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
life time: 37日 19時間 40分 7秒 2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.2ch.net/
▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。