>>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とか
この設計を実現するために、この言語にはこの表現が必要なんだ!
って代物か?
なんか開発経験の浅い素人がちょっと変わった表現入れて見ましたレベルのゴミじゃね?
って言うのはさ、想定する理想の設計書が言語から見えない
こんなの続けてたら早めに終わるよ
夕食
はい、無職いがい言えました
少ない情報でそんな結論に到達する
お前の頭のほうが可哀想だろ?
まず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
<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
確かに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で接ぎました
とか笑い話にもならん >>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にエラー表示出ているのなら、ここで聞くのは荒らしレベル
>>168
日本語読めないのなら初心者未満だな
お前はいちいち誰かに解説してもらったのか 個人レベルなら変数名、メソッド名に日本語使うのはお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の扱いに慣れてなくて申し訳ございませんが
そのあたりご存じの方いたら教えてください。
msbuildはタスク追加めんどくさいよね
Coreになった時にcsproj引き継がないでgradleライクなスクリプトに変えればよかったのに
Formアプリケーションを作成しているのですが
複数のクラスで発生したそれぞれのエラーをエラーが発生した時に
メッセージボックスに表示してかつログに書き込みたいですのですが
各クラスにはどういう実装をするのがいいのでしょうか
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パーサー見つかるでしょ ビットフィールドないのけ?
あと固定長も
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