ふらっと C#,C♯,C#(初心者用) Part151
レス数が1000を超えています。これ以上書き込みはできません。
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part150
https://mevius.5ch.net/test/read.cgi/tech/1616471904/
■関連スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
https://ideone.com/
https://dotnetfiddle.net/
■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
https://referencesource.microsoft.com/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured 前スレ988ですみなさん相手にしてくださってありがとうございます
わかりやすく教えてくださって感謝しております
またしっくりこないなどと雑な表現をしてしまい申し訳ありませんでした
複数のテキスト上でそのようなコードを確認しておりましたので順序が逆では?と私が考えた書き順でも動作に問題はないのだろうとは理解しておりました
ただあくまでコードの処理が基本的に上から下への流れであるならばそのような書き方はハードウェアなりコンパイラなりに無駄な負担をかけているのでは?との思いもあり質問させていただきました ちょっとお尋ねします
VisualStudio2017の無償版でFormアプリ作って楽しんでますが
昔作って普通に動作していたexeが
1年ほど前のWin10のアプデ以降、動作が重く計算の出力も遅くなったような気がします
これはWin10のアプデによってバージョンが対応しなくなったのでしょうか?
このような場合、何をチェックすればいいのでしょうか? intel CPUの脆弱性対応で計算能力落ちたんじゃね。
アムドのCPU載ったWindowsで試してみるとか
20H2だったらKB4601382適用でパフォーマンスアップするとかしないとか >>4
そんな事くらいで対応しなくなったら、世の中のソフトは大混乱になってる。
ログやデータが増えて計算量が増えたとか、ディスクアクセスが遅くなってるとかじゃないの?
明らかに遅いのならループ処理中に例外が出てるとかかもしれない。
調査方法はたくさんありますが、まずはタスクマネージャーで確認してみるのが良いと思います。 質問です。
Form1と2とクラスが1つあって、クラスにForm1と2のTextBox等をを使用してファイル書込み、作成、削除、追加等のコード書きました。
Form1表示→入力→Form2表示→入力→閉じるまで間に何度かクラスを使用したい。
フォーム1のみならthisを渡して、TextBoxをPublicにしてやればいいのはネット見て分かったのですが、Form2も渡すとなると、Form2に辿り着く前にクラス使用する時はどうしたらいいですか? >>13
何をしたいのかよく分からないけど、Formのコントローラーを公開するのはよくない
Form1とForm2で共通で使いたいクラスあるなら、呼び出し元で定義してそれぞれのFormに投げるじゃダメなの?
class Form1{
private クラス _クラス;
Form1(クラス c){ _クラス = c; }
}
class Form2{
private クラス _クラス;
Form2(クラス c){ _クラス = c; }
}
class クラス{} VBAのコードをVisual Studioでコツコツ書いて勉強してます。
@VBAではフォームに書き込んだ内容をエクセルシートの印刷用のシート(前もって作成済)へ転記して印刷という内容なんですが、エクセルでなくやる方法ってありますか?※転記内容は文字列や数字のみです。
AVBAでいう標準モジュール≒クラス?
BGetSet?ネットでもよく使いどころが分からないのですが、VBAで例えるならどんな感じですか? これ煽りとかじゃなくて真面目な話だけど、他人に用件を過不足なく伝える能力って
プログラミングスキルより何百倍も重要だよw
ちっとは「この書き方で自分の言いたいことを理解してもらえるだろうか?」って視点を持ってほしい
>>13
他の人も書いてるけど基本的にUI(Form)の参照を「クラス」に握らせるのはNG。
なんでダメなのか今は理解できないかもしれないがそのうち自然と分かってくる。
逆、つまりFormが「クラス」の参照を握る方向で
>>16
@C#はオフィス製品じゃないんで少なくとも標準では
お手軽に同じことを実現する方法は用意されてない
AVBAにもクラスモジュールはあるよ。もちろん完全に同じ物ではないけど
Bプロパティのことを言ってるならVBAにもプロパティはある。もちろん(以下略 ああごめん。VBAのをC#に移植してるってことか。脊髄反射してもた。スンマソ >>17
そんなの書いてみてレスもらわなきゃわかるわけないじゃん
無駄なアドバイスしてるの気が付かないかな?
何度も書いてみて人から反応をもらって鍛える能力でしょそれ >視点を持ってほしい
こう言うのってとても大切なことだと思うけれど。 あれだな、自分がちゃんと理解して回答してるか、そういうのを確認する視点も持たないとな >>16
ExcelVBAのことがよく判らなくて、答えづらい。っていうか、その変換にストレスが発生してない?
お勉強なら、VBAのことは忘れてゼロから始めた方が良いんじゃないかと。 単に印刷をしたいだけだろ
ギョーカイでは印刷用コンポーネント買ってこいで一蹴される案件 >>14>>17 ありがとうございます。説明たらずですみません。ネットみてこんな感じで作成しましたが、こういう作りはよろしくないってことですよね?クラスにxmlファイル関連の処理をまとめたいなと思ったのですが...
{}等々は省略します。
class ClsXml
Public Frm1 frm1
Public Frm2 frm2
Public ClsXml(Frm1 frm_1,Frm2 frm_2)
frm1=frm_1
frm2=frm_2
Public void aaa
frm1のコンコロール使用
Public void bbb
frm2のコントロール使用
Public void ccc
frm1とfrm2のコンコロール使用
※Frm1
ClsXml clsXml = new ClsXml clsXml(this,null)
※Frm2
ClsXml clsXml = new ClsXml clsXml(Frm1,This) C#のプログラミング本を読んでいるのですけど
C#という言語はnewしても失敗することはないのでしょうか
newの戻り値を確認したり
try catchで囲んだりてませんよね
Designer.csをみてもnewだけしてて戻り値を確認していません
識者の方教えてください。よろしくお願いします。 >>26
説明するのが面倒だから一蹴するんだよ
真に受けて買うのも別に悪くない選択 >>29
catchしたところで他に代替方法がないんだから
諦めてそこで試合終了ですよ >>29
使い方を間違えていなければコンストラクタで例外が発生しないクラスが多いので
基本的にはコンストラクで例外が発生する場合はバグであり使い方を修正する。
正しい使い方でもコンストラクタで例外が発生する場合があるクラスについては例外を捕捉してフォローする。 >>27
よくないね
依存性の方向は基本的に「個別処理 ―> 共通処理」
個別処理が共通処理に依存するのはいいが逆はよくない
変更に対して弱くなるから
各フォームが個別処理でXMLの読み書きが共通処理なので
フォームがXMLクラスに依存するのはよくて
XMLクラスが各フォームに依存するのはよくないということ >>31
>>32
回答ありがとうございます
古い人間なもので常に以下のようなコードと思い込んでいました
p = new hogeCalss();
if (!p) {
print("失敗しました");
exit();
}
---------------------------------
try {
p = new hogeClass();
}
catch(exception) {
print("失敗しました");
exit();
} >>27
Xmlの処理をするクラスなのになんでFormを使うのか?
ということに疑問を持つべき
>>29
コンストラクタでエラーが発生したら例外を投げて
例外を受けてどう処理するかはその場次第で様々なので
無視して上位に任せるのもその場でハンドリングするのも間違いではない >>34
例外が発生した時に簡単なメッセージを表示して終了するだけなら
個別の例外処理はせずにApplication.ThreadExceptionイベントや
UnhandledExceptionイベントを使うといい >>27
何となく何がおかしいか分かったかも
Formのプロパティを外からいじるのいくないとかはおいといて言っていることを
無理やり形にすると多分こんな感じかな
class control
ClsXml cx=new ClsXml
cx.aaa
cx.bbb
cx.ccc
class ClsXml
Public ClsXml()
Form frm1=new Form
From frm2=new From
Public void aaa
form1 progress
public void bbb
form2 progress
public void ccc
form1&2 progress
Formを独自拡張する必要があるならば、ぞれぞれのFormクラスを作る必要があるけど
そういうことじゃないのではないかと
元の書き方だと違うインスタンスが同じインスタンスのように扱われているのでForm1では
Form1側の操作しか出来ないと思うよ
あとFormを制御する人がいないのでプログラムとして成立しないかな >>36
Application.ThreadExceptionイベント
UnhandledExceptionイベント
ググってみます
ありがとうございました 質問です。
xamarinとC#でAndroidアプリを作成していて、ボタン押下でAndroidからPCの指定の共有サーバーにWi-Fi経由でSMB通信をしてファイル転送する機能があるのですが、それをUSB経由で接続したPCの指定のフォルダに転送する機能に変更したいと思っています。調べてみても方法が分からず、どうやってやればいいのかお教えいただけないでしょうか? C#とか関係なく、システム的にAndroid側からPCの中って参照できないんじゃね? PC側がホストになるから、PC基点じゃないと何も出来ないよ。 >>40
>>41
回答ありがとうございます。
SMB通信の前はWindows PhoneからPCの指定のフォルダへUSB経由でFTP通信をして指定したフォルダに転送していたのですが、これもandroidだとできない感じでしょうか? >>42
詳しくないので適当に聞いてね。
結局PC側からUSB接続のアンドロイトが何に見えているかが肝だよねたぶん。
ただのマスストレージに見えてるなら他の人が書いてるように
Android側からPCに対しては何もできない(PC側のアプリでAndroidの
ストレージからファイルを持ってくることは可能なはず)
Androidにそんな器用なことができるのか知らないけど、仮にNICのふりができるなら
理屈上はAndroid側からPCの共有フォルダにアクセスは可能なはずだと思うけど
かなりハードル高そうだよね >>43
ありがとうございます。
とりあえずバッチかアプリでPCからUSB経由でandroidの指定フォルダのファイルをPCの指定フォルダに転送できるか試してみます。 Visual StudioでGitを使う場合、Gitによる管理が不要なファイルのために自動で.gitignoreを作ってくれると思います
.NET 5のコマンドラインから同じようなことをするにはどうすれば良いのでしょうか?(手書きなのでしょうか?) フォームが複数あって入力された文字列やチェックBoxの状態記憶して、フォームが閉じて再び開いた時に同じ状態に戻したいんですがどんな方法がありますか? フォームのコントロールのプロパティを取得したり設定したりします >>48
単純にそれを実現するだけならアプリケーション設定を使えばできる。
https://www.atmarkit.co.jp/fdotnet/dotnettips/438winsettings/winsettings.html
ただ、それがあなたのアプリの要件に合ってるかどうかは分からない。
まともな設計思想で作ってたらほとんどの場合は合わない思うw Winform(.net 4.8)でentity frameworkにてクラス内の値を変換したいのですがどのようにするのでしょうか
public class StringValue
{
public StringValue(string s) { Value = s; }
public string Value { get; set; }
}
モデル内
public class Sample
{
[NotMapped]
public StringValue dummy { get; set; }
public string value { get => dummy.Value; private set => dummy = new StringValue(value); }
}
今は上記のような感じでStringValueをvalueに見立ててデータベース上でnvarchar:valueとして扱っています
コード上はクラスで扱いつつデータベースでは別の型として扱うという事をしたいです
EFCoreではHasConversionでできそうですがEFではそう言ったのは無いのでしょうか? >>53なんか解決かもです
出かけるので確認するのは後になりますが駄目ならまた書き込みます
ありがとうございます オブジェクト初期化子とコンストラクタは何が違うのでしょうか?
見た目はインスタンス作成時に()を付与するかどうかの違いがありますが、やってる事は同じに見えます…
別物として扱っているのは理由があるからなのだと思いますがイメージが掴めません
初歩的な質問ですみませんが教えてください コンストラクタを実行したあと属性に代入するのが初期化子
コンストラクタにはインスタンス化時に絶対に必要な処理を書く
初期化子にはどっちでもいいオプションを書く >>27
私感じでやっちゃってますね。みんなさんが言うようにclassでformを使うのは良くないのは言われれば分かりますが、Formを使わないやり方がPublic static使う方法しか分からないし、ネット検索かけてもformを渡してるやり方ばかり出てきますね。
Public static string stA
Public static string stB
Public void AddFile
〇〇.add stA + stB
先生がネット故に...みなさんはどこで学ぶんですか? >>58
会社ソースとかMSDNとか
画面とデータを分けるやり方はそういう構造を要求する
フレームワークやライブラリが多かったってだけかも >>58
ネットで調べるなら、GUIアーキテクチャ、MVC、MVVM、関心の分離あたりで調べたら?
ネットで十分に学べる この短い数行のコード見ただけで相当ヤバいのが分かる。
これは関わっちゃいけないやつだ。 LangVersionか何か判定する方法ある?
実際はLangVersionを判定したいわけじゃなく、
C#が「interfaceのデフォルトが使えるバージョン」ならデフォルト実装を用意したものを、
そうでなければデフォルト実装はなし、
というのを#ifプリプロセッサな何かで切り替えたいんだが。 どうせ.NET Frameworkなら最新のC#使ってもデフォルト実装は使えないんだから
言語のバージョンじゃなくて.NETのバージョンで分けたほうが良くない? あればここに載せてるだろうからないんでしょうね
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/preprocessor-directives
まああってもC#のプリプロセッサのシンボルは定義済みかどうかしか評価できないから
既述が大変そうだよね
結局VS使うならプロジェクトのプロパティーで自分でシンボル定義してソリューション構成を
手動で切り替えるしかないんじゃないのかな #if (NET or NETCOREAPP3_1)
でとりあえず要件満たせそうなので
これでいきます。 最近VisualStudio2017から2019に変えたんだけど
WindowsAPIは使えなくなったの?
2017で書いたプロジェクトなら2019で読み込んで動くけど
直接2019から同じこコード書き始めると「現在のコンテキストには名前が見つかりません」
ってでて波線がで警告表示される
これは2019から始まったターゲットフレームワークとかいう奴が影響してるのか?
どうしたら以前のようにWindowsAPIが使えますか? 普通にやれば普通に今まで通り動くので
何かが普通にできてないんだろう としか言えん
Windows API呼び出すならTargetFrameworkはnet5-windowsにすべきではあるけど
別にそれは必要条件ではない
単にnet5でも問題ない(Windows以外だと実行時例外になるだけ) >>68
resありがとうございます
.NET5で試してもできませんでした
ただし「usinディレクティブか、アセンブリの参照が違うのでは?」
と具体的なメッセージに変わりましたから、
何か探しに行ってくれてるようですね
これは単純にIDEとしてのVS2019のバグということでしょうかね? いや単にあなたのコードの記述ミスということだと思うよ もしかするとDLL参照が黄色いマーク付いてるんじゃね? ブラウザからSQL文とパラメータを受け取って、PostgreSQLのテーブルを検索し、結果を返すWebAPIを作成しています。
PostgreSQLとのやり取りはDapperを使っており、パラメータは匿名型で記述しています。
ブラウザからSQL文とパラメータを送る際にjson形式でシリアライズしているのですが、これをAPI側でデシリアライズを行うと匿名型が元と違う形になってしまいます。
var foo = new { Key1 = 1, Key2 = 2};
// foo = { Key1 = 1, Key2 = 2 }
var strJson = JsonSerializer.Serialize(foo);
// strJson = "{\"Key1\":1,\"Key2\":2}"
var bar = JsonSerializer.Deserialize<object>(strJson);
// bar = ValueKind = Object : "{"Key1":1,"Key2":2}"
デシリアライズした時に、シリアライズ前と同じ状態にすることは出来ないのでしょうか。 DataContractJsonSerializerの代わりにJavaScriptSerializerを使う Json.NETなら.Deserialize<Dictionary<string, object>>(...)にすればDapperのパラメータオブジェクトに使える >>75,76
Json.NET で出来ました。ありがとうございます。 処理を非同期にするかどうかの切り分けってどうすればいいん?
HTTPリクエストとか、I/Oとか、DB書き込みくらいでいいの? 基本はIOバウンドなら非同期、CPUバウンドなら同期、でいいんじゃないかな 処理の完了を待たずに他の処理をしたい場合や
UIスレッドをブロックしたくない場合は非同期にする 非同期にしたら最後
次の処理が次の行とは限らない地獄 基本的にまずは全て非同期
これは非同期にする意味ないなと思ったら同期 いや普通基本は同期でヘビーなとこだけ非同期にすべきだよ。
全てのアプリが何もかも全部のステップ非同期なんかにしたら、
全体的にはCPU食うだけでメッチャ重くなる。 その、意味があるとかないとかを、どうやって判断するかと聞いてるんじゃないかね それだとまずは全てasyncで制作したあと、
ああここは意味がないなと、ひとつひとつあたって普通の同期に変えていく作業するわけでしょ。
だって基本まずはすべて非同期といってるわけだから。 時間がかかるのは非同期にしたほうがいいが、短いのは切り替えの分だけ遅くなるかもな >>88
全部taskValueで書けば良いんだな! 非同期中に他になにかやりたいことがあれば非同期
ただ待ってるだけなら同期 基本非同期とか言ってる人は、本当にアプリ組んだことあるのか疑問 基本は非同期でいいんだよ
どうせデータアクセスやらAPIコールで呼び出し元まで遡って非同期になる
まずは非同期で考えて考えた結果こいつは非同期にする価値がないと気付いたら同期にする
それでおk
例えばドメインクラスなどはすぐに非同期にする価値ねえなと気付く筈なので同期にすればよい
初心者がやりがちなミスは非同期にすべきインターフェースメソッド、デリゲートを同期で定義してしまうことだ
これは同期デフォルト脳の弊害であるがこのミスは後々ボディブローのように効いてくる
まずは非同期で考えてじっくり考えた結果非同期にする価値なしとわかったら同期にする
こうすればゴミのようなインターフェース、デリゲートに苛つかなくて済む アプリかサーバかとか環境の平準リソースとかでも変わるしなあ
完成までに一度でもちゃんと検討しとけばいいと思うわ Java は throw が伝染する・・・
C# は async が伝染する・・・ >>99
x async使ったことないお
o async使ったことないよ
日本語は正確に。 使うのWinFormsだからってナメてたらオーナードローと追加機能まみれで、チャリが戦車になるレベルで原型とどめてないコントロールばっか。
WPFのほうがだいぶ楽だったよ・・・タスケテ・・・ JavaScript, Node.js は非同期で、例外などが面倒くさい
だから、同期のRuby, Ruby on Rails を使う >>102
チャリ→チャリオット
原型は完全に残ってるな formで入力→計算→出力てな感じなもの作成してます。
exe起動後一番最初に入力するTextBox1に番号記号を入力します。例A−101など。
それを入力した時から他の人が同一番号記号を使用出来なくなるようにしたいんですがどうすればいいですか? データベースに文字列を登録して各ユーザーがチェックすればOK データベースからデータグリッドビューに表示させる際の文字列のソートが分かりません
データベース
id(int:主キー,自動採番), code(string:値としては数値で構成"01","02","10"等), name(string)
OrderByとかの使い方が良く分かってないだけだと思うのですがうまくいきません
//登録
Test.SaveChanges();
//登録後、ソートしてコード順で表示したい
Test.DbSetEntity.Where(x => x.id == id).Load();
DGVView.DataSource = DbSetEntity.Local.ToBindingList();
ご教授いただければ幸いです 20行程度の1つのメソッドだけポリモーフィズム使って処理させたい&継承するクラスが複数有るとき、
サブクラス毎にファイル別ける? 同じファイルに全部書く?
今までファイル別けてたんだけど、なんか邪魔なのでファイル1個で良い気がしてきた
ただ、そうすると今度はファイル名に悩む
フォルダ作ってそこにファイル別けて全部ぶち込めば良いのかな? 1メソッドだけの差し替えならデリゲート使えよ
それはともかく、俺は仕事では突っ込まれるのが面倒だから必ず分ける
プライベートなら適当に意味のある単位で纏めることもある サブクラスをその継承元クラス内にインナークラスとして定義する前提で同じファイルに書く
仮にそのクラスが肥大化したら「BaseClass.ExtendedClass.cs」って別ファイルにpartialで切り出す
ってのを自分はよくやる
ただしインナークラスをそういう風に使うのは一般的にはやっちゃいけない気もする そもそも1メソッドだけなのにあえて多態を使う理由は実装を分散させたいからに尽きるわけで、
結局1ファイルに纏めるんならそれもうswitchでもええやろという気はする クソデカclassにすると、newする時間もバカにできない >>111
1ファイルに複数の型があっても全然構わないと思うよ。
Enumにそんな原則誰も適用してないよね?
VSにはクラスビューもあるし必要なら簡単に定義場所に飛べるので
ファイル名にこだわる必要はあまりないと思う。
だから単にベースクラスの名前でもいいと思うけど、気になるなら
「Hogeとその派生クラス」みたいにするだけじゃないの? >>111
ボリモーフィズムと継承って単語を並べて使うのが気持ち悪いな
多態性と継承か、ポリモーフィズムとインヘリタンスを使って欲しい >>118
newするたびにコードも複製される勘違いしてる知り合いが、似たような事を言ってたなあ ✘ コードも複製される勘違いしてる
○ コードも複製されると勘違いしてる でかいクラスってメンバーが多かったりする奴を言ってるのかと思ったけどコードの話なの? jsonの逆シリアル化について教えてください
以下のコードでローカルのjsonファイルを読み込み、逆シリアル化をしてオブジェクトを得たいと考えています
@var readJsonFile = File.ReadAllText(filePath);
Avar jsonDeserialize =JsonSerializer.Deserialize<List<Food>>(readJsonFile);
public class Food{
public string Name{get;set;}
public int Price{get;set;}
}
しかしAの部分が上手く行きません。
変数readJsonFileには所定のjsonファイルの内容を取得出来ているのですが、jsonDeserializeには値が入ってきません。
具体的にはデバッグで変数の中身を確認すると、jsonファイルに記述している項目数だけ要素は取得していますが、Name:null、Price:0の様にファイルに記載しているName等のデータがありません。
エラーなどもなく、何が原因なのか突き止めることが出来ません…。
初歩的な質問で申し訳ありませんがアドバイス頂きたいです。
長文失礼しました。 そのjson上げてもらわないと何も回答できないのでは >>126
申し訳ありません
jsonファイルには以下の様に記述しています
{
"name": "りんご",
"price":100,
},
{
"name": "みかん",
"price":80,
},
{
"name": "バナナ",
"price":90,
} 全体を[]で囲って配列にすれば、デシリアライズできるんでないの? >>128
シリアライズは試していません
シリアル化、逆シリアル化はそれぞれ単体で利用出来るものと認識していたのですが、そうではないのでしょうか?
また以下の記事の注釈の箇所を参考にしたのでDataContractJsonSerializerは今回利用していないです
https://docs.microsoft.com/ja-jp/dotnet/api/system.runtime.serialization.json.datacontractjsonserializer JSONもC#も(JavaScriptも)CaseSensitive
NameなんてプロパティJSONに含まれてない
DataContractJsonSerializerだとJSONのcamelCaseとC#のPascalCaseをよろしくやってくれる機能はないんだっけ
ならNameとPriceにそれぞれDataMember属性付けて
[DataMember(Name = "name")] public string Name { get; set; }
みたいにする あ、System.Text.Json.JsonSerializer使ってるのか
ならDeserializeの第2引数でPropertyNamingPolicyにCamelCase設定したJsonSerializerOptionsを渡せばいい >>133
ありがとうございます
PropertyNamingPolicyを指定すると所望の動作をしてくれました
試しに上記の指定をせず、jsonファイル側の要素をname→Name、price→Priceのように大文字にすると読み込む事も確認出来ました
ただ、ファイル側で合わせ込むのは良いやり方ではなさそうなので教えて頂いた方法を使わせて頂きます
大文字と小文字で挙動が変わるのは想像していませんでした
勉強になりました、ありがとうございます form1の中にパネルを貼りそこにformAとformBを追加しました。
追加したformのTextBoxの値ってどう取得するんですか? >>136
OKボタンを押したときにstring型のpublicメンバ変数にTextBoxの値を入れてCloseメソッドを呼ぶ
呼び出し側のShowDialog的な奴の下でpublicのメンバ変数に入れた値を取得する >>136
「どう取得するか?」という発想がそもそも間違ってる。
Formから知りたい情報はFormにプロパティとして公開してもらうようにする。
Formというお店の厨房にづけづけ乗り込んで今日のおすすめを
聞き出すようなコードを書いてはいけない。
それとそういう用途には普通はFormじゃなくてUserControlを使う 質問なんですが
フォルダを監視したいのですがFileSystemWatcherクラスでCreatedイベントを漏らした時の為に
Timer1_Tickでフォルダを定期的に監視し、差分で新しいファイルをあぶり出したいのですが
これだとリネームした時も、新規ファイルだと誤爆してしまいます
こうゆうときCRCでチェックして同一ファイルだと確認するのが一般的なのでしょか? >>139
CRCより中身比較の方がコスト低くない? FAQっぽいですけど、
pthreadの pthread_cond_* にあたる機能は.netだとどれでしょう?
Mutexは見つけたんですが…。 >>141
比較元のデータとしてファイルの中身を丸ごとコピーでもするの? >>140
れすさんくすです、ファイルのプロパティみても更新日時が変化するだけで
削除と追加のしっぽをつかまえるのはできませんでした
>>141
れすさんくすです、1個1個のファイルのCRCチェックって確かにやりたくないですね
中身比較って2つのファイル開いてバイナリで比較していくってことでしょか? えっと、そもそも>>139の前提の
> FileSystemWatcherクラスでCreatedイベントを漏らした時
って、FileSystemWatcherってOSのファイルシステムの機能で動いてるから
少なくとも現在のWindows版の.NETなら起こらないと思ってたんだけど・・・・
本当に漏れるようなことがあるの?
FileSystemWatcherの使い方が間違ってバグってるとかじゃなくて? >>142
知らんけどAutoResetEvent/ManualResetEventとかそうじゃないの
>>146
少なくともバッファあふれはありうる
現実に起こるかどうかは分からんが >>146
ファイルを同時に10個つくったりとか、他に重いアプリあったりしたら
結構取りこぼします、なんとゆう中途半端なクラスだとおもた >>142
状態変数が一対ならMonitor.Wait/Pulse
複数ならMunualResetEventSlimをベースに色々使ってがんばれ >>147,148
であればバッファサイズを大きくすれば解決するんじゃ
https://docs.microsoft.com/ja-jp/dotnet/api/system.io.filesystemwatcher.internalbuffersize?view=net-5.0
と思ったら既定値は8KB、最大でも64KBなのかあ
64KBにしてもとりこぼし一杯ということであればFileSystemWatcherでの監視は実用に耐えないってことになりそうだね FileSystemWatcherほとんど使ったことないけど、ドキュメントを素直に読めば
イベントのバッファを最大にすれば未処理のイベントが4096を超えない限り
オーバーフローは起こらないはず。
本当に取りこぼしなんて起るの?w
何か使い方間違ってへんか
まあ本当に起こると仮定して、ドキュメントには何も書いてないけど
FileSystemWatcherのイベントはたぶん常に同じスレッドからraiseされてるはずで、
であればイベントハンドラでちんたら重い処理をやると当然FileSystemWatcherの
イベントのキューを溢れさせる原因になりうる。
だったらイベントを処理する側もキューを持って、FileSystemWatcherのCreatedイベントハンドラでは
そのキューにFileSystemEventArgsをぶち込んだらすぐに抜けるようにしたら結構改善するんじゃないだろうか?
いや知らんけど 俺は割と使うけど、あんまりとりこぼした事は無いな。
まあ確かに、その通りで割り込みだと思ってイベントハンドラで上がってきたら即キューに入れてた。 UWPのStorageLibraryChangeTrackerてのが凄いんだけどね
通常の監視どころかアプリが止まっている間の変化も記録して
アプリの起動時に通知してもらえる
但し音楽やビデオ、画像のライブラリ限定だから使えるアプリはそれほど多くない
帯に短し襷に長しだわ >>150
さんくすね、バッファサイズを大きくしても根本的な解決にはならないとどこかで見て
やってませんでした、一度MAXまで上げて実験してみます
>>151
レスさんくす、FileSystemWatcherのイベント→PathをListBoxに→Timer1_Tickで処理
みたいにしてます、ファイルサイズ見て比較程度の処理しかしてないから多分重くは、
>>152
なるほど自分のコーディングがまずい可能性
>>153
使い道がピンポイントですね、Windows上にリネームとかのファイル操作の履歴があれば ファイルのタイムスタンプ使えばよくない?
リネームでLastWriteTime更新される?
同じコンテンツを2度処理したくないなら
ハッシュを記録しておいて比較すればいいけど
それはタイムスタンプでフィルタするのとは少し意味が違う >>155
れすさんくすです、確かにタイムスタンプでよさそうな気がします
LastWriteTimeはリネームで更新されるので、
CreationTimeとSizeを足した値をハッシュがわりにしようかと
>>156
レスサンクスです、変更トラッカーみました
ファイルの変更を受け取ることができて、変更あったらアプリをアクティブ化できる
って結構強力な感じがしますね、やりたいことドンピシャなんですが、ちょと難しすぎます >>148
実務で10年以上動いてるFileSystemWatcher使ったサービスあるけど取りこぼしたことは一度もないぞ?
何か使い方が間違ってると思う >>147
>>149
ありがとう御座います!
Monitorがまさに探していた機能でした! >>158
まじでっ、一度コードをシンプルにして実験してみます
ありがとうございます
ちょっとバッファをwatcher.InternalBufferSize = 65536;にしたらちょとマシになった気がします あとちょっと気になったのが、SynchronizingObjectを設定してUIスレッドでイベントが起こるようにしてたら
たとえイベントハンドラが軽量であってもUIスレッドで重い処理をやってたらその間は当然イベントは
起動されずバッファーにたまってしまうはず。
まあ今時UIスレッドで重い処理を書いちゃう人がいるとは思えんけど 親クラスの型ならば
継承したクラスでも親メソッドが呼ばれるのが気持ち悪いです。
どういう利便性や方針があってそうなっているのでしょうか? >>162
「オブジェクト指向」とGoogle検索 どういう思想に基づいてそうなっているのでしょうか?
Javaならこんなときでも子クラスのメソッドが呼ばれるはず。このほうがしっくりくる。
C#はvirtualとかoverrideと書かねばならぬのも記憶のコストがかかって嫌い。 思想は知らないが、あなたがjavaラーだから気持ち悪いと思うのでは?
親の名前なんだから親が動くでいいんじゃん? >>162
ちょっと何言ってるのかよく分からんけど、
オーバーライドと隠蔽(new)を混同してない?
サブクラスでオーバーライドしたメソッドは、そのインスタンスがたとえスーパークラスの変数に
入っていようが無関係にサブクラスで再定義されたメソッドが呼ばれる。
「親メソッドが呼ばれ」たりしない。
それはオーバーライドじゃなくnewした時だけ >>162
1.最適化のため
2.すべてがvirtualだと親クラスはすべてのメソッドがoverrideされうることを想定しなければならないので設計が困難になる >>161
レスサンクスね、SynchronizingObjectは設定してないです
でも、そんな感じで重くなってるかもしれません、
ファイルを管理するクラスに詰め込んでいるせいかもしれません
やることが見えてきました ListViewで選択→PictureBoxに描画したい。描画する絵は連続した折れ線で曲線はなし。ListViewに転記するのはデータNo等を表示。
PictureBoxに描画するのには座標点などが必要と思うんですが、どんなFileを作り、どんなデータを入れとくのがよろしいですか? >>171
>ListViewに転記するのはデータNo等を表示。
ごめん、10回読んだけど何を言ってるのかさっぱり分からないw >>172
ごめんなさい。
ListViewに描画したいファイル名などの一覧を表示しておいて、選択したそのファイルを読み込んでPictureBoxに描画したいんです。
そこで、描画する為に適したファイルや、どのように座標点など保存すればようでしょうか? まず固定のファイル読み込んでPictureBoxに表示するまでを作って、
それからListViewでファイル選べるように拡張してください
結局のところ、何もかもわからないんでしょうけど ますます何言うてるか分からんが、
自前で座標情報を基に描画するなら、PictureBoxじゃなくてCanvasだろ。
WPFならね。。 PictureBoxって時点でWPFじゃなくてWinFormsなのは一目瞭然だろ
いきなりCanvasがーって言ってるお前かなりヤバいよ 一回でもPictureBoxに画像を表示してみたことがあるのか怪しい >>173
もうちょっと読み手の立場になって質問した方がいいと思うよ。
結局何が聞きたいのかどうもよく分からない。
まとまったデータをお手軽にファイルに保存したり復元したいなら
シリアル化が第一選択。シルアル化の方法はいろいろあるのでググって自分で調べて選択してください。 最終的に何が作りたいのか?を書けば早い
似たようなツールがあるならその部分を出せば早い つか、特殊な用途まで全部置き換える必要はないだろ
それが出来ないから.NET5は使えないという方がおかしい
MSはMSIXとストアでメインをやるつもりなんだし 初めてC#を触ってみようと思っている者です。
Visual Studioインストールして、「実戦で役立つ C#プログラミングのイディオム/定石&パターン」の本に書かれているものを動かそうとしているのですが、エラーが出ます。
(ネットに書かれてるHello,World!は動かせました。)
どのようにしたら本に書かれてるものを動かすことができるか、教えて頂けませんでしょうか。 自分以外はみんなエスパーだと思ってるのか、悪意でわざとやってるのか、
それとも天然なのかw
いずれにせよちょっとひどすぎるね これをエスパー出来ないならプロとは言えないね
.net落としてないんじゃね? .net frameworkじゃなく、.net5で組んでしまってるとかじゃないか。
いままで組んできた人は問題ないが、初めてC#と.netの世界に来た人は、別だとも思わないだろうし足をすくわれるかと。
しかも2019だと、.net frameworkが結構見つけにくい。 >>183
Hello Worldができるなら次はザ・ワールドだ。段階を追って成長していこう。 >>185
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 >>189
スレッドの趣旨は尊重するよ。
その「低レベルな質問」の低レベルとは日本語の能力や質問能力も含むの?
常識的には違うんじゃないのかな。
許容されるべきなのはあくまでプログラミングの初心者だよね 環境構築すら分からない初心者ならどこが分かってないかすら分からないでしょ
だからこそ>>184を書いたわけ
酷いと思っても言葉にせず飲み込むのがこのスレのルールだし、
>>183の質問の日本語が破綻してるとも思ってないよ だから何を理解してないかを理解している必要はない。
必要なのは自分の直面している問題を他人に正確に理解してもらうこと、
少なくともそういう努力をすることだ。
>>183にはそういう努力の痕跡を感じない。
エラーが出ます
何だよそれふざけてるのか。
普通はこうじゃないか。 その本を見たことがないひとはお断りの質問だからね
読んだことがあるやつならつまづきポイントも予想できるだろう 家電やソフトウェアのサポートセンターに相談するのにその製品を熟知している必要はない。
だからといって、
「エラーが出てるから何とかしてよ」
これじゃサポセンのお姉さんも困っちゃうよw >>192
そう思うならスルーするのがルールだよ
ルール違反の方がマナー違反より質悪い事くらい理解しなよ ここのサンプル見たらv4.5.2依存なのでその環境が無いんじゃないかな
https://gihyo.jp/book/2017/978-4-7741-8758-7/support
何章・何節のどのコードでどういうエラーが出るのか書いてくれれば
わりとすぐ原因分かると思うよ あまり情報を出しすぎると解決されてしまい悔しいので…… datetimeについての質問です。
指定した日時の曜日、その月は何日まであるのかという情報を取得したいのですが、
datetimeの使い方を検索すると、現在の日時の取得するばっかりでてきてほしい情報がないです。
どうすれば、指定した日付で、曜日や日数を取得できるのでしょうか?。 >>200
DateTimeクラスのコンストラクタ呼び出しで調べたい日を引数にして呼び出して
(簡単なのは年月日時分秒でしていするのかな)、確保したインスタンスの
DayOfWeekプロパティに指定した日時の曜日情報がDayOfWeek列挙型定数として
保存されている
月の日数はスタティックメソッドのDateTime.DaysInMonthで調べられるらしいよ >>196
それは君のルールであってスレッドのルールでも俺のルールでもない。
だいたい偉そうに言ってる自分のやってることは何なんだよ。
お前のリプは悪いリプ
俺のリプは正義のリプだ、ってか(笑) >>205
馬鹿な奴だ>>190
だいたい「お前のやってるいことは何なんだ」といってるそばからこれだ。
俺様は特別?ああそうですか(笑)
自分棚上げとか人間として最低だと思うがな 初心者プログラマーの為のスレであって
初心者プロファイラーはお呼びでは無いッス
僅かな書き込みから真実を見つけ出す熟練プロファイラーだけが書き込めるッス >>200
datetimeについての質問です。っていう質問がおかしいんだよ。
datetimeってお前が作った変数じゃないの? プログラム初心者が質問の仕方がなってないのはよくあることだし
質問の仕方を教えたら良いだけで、それが嫌ならスルーすべき
いちいち怒ったてたら初心者が委縮して寄り付かなくなっちゃうよ なんでも質問できるような面しておいて
気に食わないときは叩き潰そうぜ >>210
私はプログラム初心者です
あなたは馬鹿ですか? IEnumerableにAppendで要素を追加してからCountを参照しても0になっています。
IEnumerable<Person> PersonEnum = IEnumerable<Person>();
PersonEnum.Append(new Person());
MessageBox.Show(PersonEnum.Count().ToString()); //なぜか 0
下記のようにすれば正しい要素数を得られます。
IEnumerable<Person> PersonEnum = IEnumerable<Person>();
PersonEnum = PersonEnum.Append(new Person());
MessageBox.Show(PersonEnum.Count().ToString()); //正しい数が表示される。
これは何故でしょうか? そういうもんだから
IEnumerable<Person> PersonEnum = new Person[0];
のPersonEnum自体に追加しろって言われても追加できないでしょ >>213 Enumerable.Append<TSource>(IEnumerable<TSource>, TSource) メソッド (System.Linq) | Microsoft Docs https://docs.microsoft.com/ja-jp/dotnet/api/system.linq.enumerable.append
> 注意
>このメソッドは、コレクションの要素を変更しません。 代わりに、新しい要素を使用してコレクションのコピーを作成します。 >>214-216
皆さんありがとうございます。
納得いきました。 >>202-203
回答ありがとうございます。
無事情報の取得ができました。
ありがとうございました。 ComboBoxにて選択したTextによって配列?Point?の戻り値を取得したいんですが、未だ使った事のないGetSetの出番ですかね?
ComboBoxにはA.B.CなどのTextです。
配列の中身は固定値で
A [0]X=25、Y=25
[1]X=30、Y=25
[3]X=30、Y=50
B [0]X=125、Y=25
[1]X=160、Y=25
[3]X=160、Y=250
などです。数値に規則性はないです。
触りのコードでも教えて頂ければ幸いです。 >>223
コンボボックス選択した瞬間に処理したい?
それとも
決定ボタンを押したときにコンボボックスで選択されてる内容が欲しい? >>220
これはエラーメッセージが悪いかも
メソッドの中では型を宣言することはできないから
public class Productの前に閉じ括弧がないとおかしいって判断してそういうエラーを出してる あるリストを重複なしのグループに分けたいのですがいい方法を知りませんか?
{1,1,1,2,2,2,3,3,3}→{1,2,3}{1,2,3}{1,2,3}
{1,2,2,3,3,3,4,4,4,4}→{1,2,3,4}{2,3,4}{3,4}{4}
例は数字だけど本来はクラスで、各グループのインスタンスは別々のものにしたい
1(1組山田)、1(1組山本)、1(1組山下) >>225
ありがとうございます。
最初のVisualStudioを立ち上げた画面で色々選択できますが、そこで選んでいるものが間違っておりますか?
それとも、コードを改善すれば直るのであれば、どのように記述すればよいか教えて頂けますと大変助かります。 >>227
この本の1番最初の方にサンプルコードはこのリンクからダウンロード出来ますってあるからそれ落としてきてvisual studioで開いて自分のと見比べたらわかりやすいと思う >>227
答えが書いてあるだろ
お前みたいなバカは何をさせてもダメだ >>227
Productクラスの宣言をMainメソッドの外に出す
例えば
class Program {
static void Main(string[] args) {
…
}
public class Product {
…
}
} >>226
{1,2,2,3,3,3,4,4,4,4}→ {1}{2,2}{3,3,3}{4,4,4,4} → {1,2,3,4}{2,3,4}{3,4}{4}
list
.GroupBy(x=>x)
.SelectMany(x => x.Select((item, index) => new {item, index}))
.GroupBy(x => x.index, x => x.item); >>231
インデックス割り振ればよかったのか
ありがとう >>232
紙面に載ってたのを手で入力したんじゃないかな
うちの新人も最初こんな感じのところでけつまずいてた
英文科の人間を取っちゃった人事に文句言うしかないんだけどな え?なんだそのクソ本?
駄目なコード例じゃなくて?
ヘイヘイ動くぜ!ってノリで書いてあんの? >>220
こういう人って頭に障害があるのだと思う 確かに丸写しすらできずに人に丸投げするような人は頭の病気だよね エフェクトの効いた直撮り画像に映る言葉を失うようなミステイク
実に趣深い… >>231
賢いなw
LINQ的な発想が苦手だからいい頭の体操になった >>223
この人もさあ、なんでもうちょっと他人に自分の問題を理解してもらう努力をしないの。
率直に言って何を言ってるのかさっぱり分からん。
別に罵倒したくて言ってるわけじゃなくて、どんなに善意の人でも
理解できない問題には答えようがないと思うよ あんまりいぢめてやるなよw
ミミズだって オケラだって 220だって
みんな みんな生きているんだ 友だちなんだ
トンボだって カエルだって 223だって
みんな みんな生きているんだ 友だちなんだ >>223
俺ならComboBoxのitemのTagにPointを入れとくかな あんぱん買ってくるのでゴミみたいな質問をさせてください…
標準入力で
整数n
n文字の文字列
を取得して、n文字の文字列を1字ずつ縦に出力したい場合は何をどうすれば良いのでしょうか
検索する為のキーワードだけでもご教示いただければ嬉しい限りです… >>249
string str="unko";
str.Length←文字数
ループで回して
if(str.Length==n)出力
でええんじゃないだろか? 標準入力からの行読み込み
文字列を整数に変換
文字列から文字取得 あるいは 文字列を配列に分割
改行 出力 バイト配列と、構造体の相互変換ですが、Marshal を使った方法
Marshal.PtrToStructure / Marshal.StructureToPtr ではリトルエンディアンしか対応していません。
ラージエンディアンとBCDに対応した相互変換のライブラリ等はありませんでしょうか。
.NET5 を想定しています。 >>249
その文字列の直前直後に改行がある場合はConsole.ReadLine()で読んでforeachで1文字ずつConsole.WriteLine
そうでないならConsole.Read()をn回呼んでConvert.ToCharしてConsole.WriteLine >>255
やっぱ無いですか。
とりあえずアトリビュートで場合分けしてやってみます。 >>249
たぶん、プログラムの基本である、逐次実行を理解して無いんじゃなかろうか
上から処理するし、順に出力されるのが基本
縦に出力させたいなら、上から順に出力する方法が基本
一気に表示させる事は出来るが、結局内部で上から溜めて一気に吐き出してるだけ 逐次処理なんて時代遅れ!!
LINQとかで一撃でズバーっと解決しちゃうのがナウいッスよ >>249
任意の場所に縦に並べたいなら、Consoleのカーソル移動をさせるメソッドを使えば良いよ。 >>228
>>230
ありがとうございました。
エラーが出なくなりました。 >>236
ありがとうございました。
とても助かります。 みんなどこでプログラム学ぶの?独学?有料スクール?会社入ってからの教育プログラム? 切っ掛けは独学だったり学校だったり新人研修が多いんじゃないかな
けどその後はみんな独学でしょ >>260
>>261
で?またお前が間違えていたのか、それとも本が間違えていたのかそれくらい書けよ
だからバカだっての >>262
最初は雑誌、次に趣味でゲーム作る
で、会社入ってOJT >>262
昔と違って覚える範囲が広いから
最初はセミナー受けた方が楽じゃね >>267
事前学習無しでセミナーなんて金をドブにすてるだけ
入門書でも買っていくらか触ってみて疑問点をまとめてからうけるべき 質問です
System.Numerics.BigInteger型の整数を小数含めたfloatで乗算したいのですが、何か方法はありませんか? ASP.NETで作ったWEBアプリにグラフ追加したら、iOSでボタン押しても動作しなくなった。
原因分かる人いる? >>270
doubleやdecimalで収まる程度の桁数なんだったらそれらに変換してから計算すりゃいい
収まらないんなら必要な精度を決めて予めfloatの方を10^n倍して整数化した上でBigIntegerに入れて乗算するとか >>270
無駄に頑張っても疲れるし外部のライブラリを使うのが楽
BigDecimalとかでググれば色々見つかるよ >>270
(1) 与えられるBigIntegerの値の範囲
(2) 演算結果として欲しい型と精度
まずこういう要件を定義しないと何とも言えないのでは?
こまけーことはいいんだよならdoubleにキャストして演算するだけだろうけど form1にTabControlとボタン2つ配置。
ボタンはnextボタンとreturnボタンとしてボタンのclickに応じてtabpageを切り替える処理がしたいです。
※処理※
起動時tabpageは最初のページ。nextで次ペ頁、 returnボタンで1つ前の頁。
最終ページでnextなら最初の頁。最初頁でreturnならformを閉じる。
それぞれのボタンのイベントに処理はネットみて書けたんですが、うまいこと一つにまとめる方法が知りたいです。 タブに順番なんかあったっけ?
ユーザーがドラックしたら移動できんかったか? >>276
ボタンのイベントを同じメソッドにしてその中のsenderで処理を分ける class c {
public byte[] arr;
}
foo = new c(){
arr = new byte[10];
}
var ff = foo.GetType().GetFields(
BindingFlags.Instance |
BindingFlags.Static |
BindingFlags.Public |
BindingFlags.NonPublic |
BindingFlags.GetField
);
var f = ff[0];
var v = f.GetValue(foo);
この時 v は byte[] になりますが、v[0] にアクセスしたい場合はどうコーディングするのでしょうか。
そのままv[0]とすると、object型に[]を付けられないとエラー表示されます。
var zz=(byte[])v;
var z = zz[0];
とすればアクセスできる事は確認していますが、byte 部分が不明でもアクセスできるようにしたいのです。 型が分からないのに配列でアクセスできるわけないだろ。
型制約でも付けてみれば? 自己解決
var zz = (Array)v;
var z = zz.GetValue(0); ちょっととりとめのない質問なんですけど
社長が取ってきた仕事でどっかの会社が作ったC#アプリをうちの会社で修正するという仕事の担当になりました
んで中を調べてたら
edmxって言う拡張子があって
それがEntityFrameworkと言うことがわかったのです
データベースももらってきてビルドしたら通るように放ったのですけど
edmx内にあるcsファイル?(ッポイやつ)を開こうとしたらビルドエラーになってデザイナーが表示されなかったり
なんだか訳がわからなくて・・・
EntityFrameworkを猫でもわかるように解説してるところってないですか? というか。
それはきちんと全てのファイルを開ける状態を要求しなければダメなパターンでは。
ああ。無駄な要求だと言うことは分かってるけど。 public class PropertyCls {
public int PropertyInt{ set; get;}
}
class Program {
static void Main() {
PropertyCls p = new PropertyCls();
p.PropertyInt = 32;
Console.WriteLine(p.PropertyInt);
}
}
GetSetの壁にぶち当たってます。調べてもこんなコード等しか出てないし使い所が分かりません。
Mainの中にint p=32で終わりじゃんとか思えないんですが...
ひとつじゃ使わないけど、PropertyIntの他にもNameとかAgeとか複数の構造体?風な事が変数風?に出来るよって感覚ですか?
社員番号とかの例とかよく見ますが、他によく使うパターンとか教えて下さい。 xmlファイルと言っても開いてどうなるのでしょうか・・・
とりあえずドキュメントは取説だけあって
doxygenでクラス関連図とか抜き出してみたけどコメントないし名前の付け方も訳がわからないので動かしながら見るしか無いという地獄・・
Totigiとかそんな感じのクラスがあって・・・ つかなんで使いどころがないと進めないんだ?
学校の勉強でいちいち使いどころとか考えてたか? get setは構造化の基本
データの塊はこーゆー設計がいいよねって話
データの塊なので、利用、登録は意識しない
(なるべく他に依存しない)
ただ、オブジェクト指向だからって、車のネジ一本から作るのは間違い
そのアプリが目的としている形のオブジェクトでいい
トラックなのか乗用車なのか、とか、車なのか電車なのか すまんね。
ただ「プログラムの構造・設計」って意味で言ったので間違ってないよ
(俺自身は隠蔽する意味を見出していない、日本語訳が間違ってるだけ?)
ちなみに、質問者のプログラムだと、登録と利用が同時に行われてるので、get setの意味は全く無い
意味ないと思うのは当然 訳分からん俺様用語を使っている時点で本当は自分で何も調べてもいなければ
他人とコミュニケーションする意思もないことは明白。
getsetの壁って何やねんw >>288
初心者の域をでない俺だけど
そういう理屈っぽい所理解したいなら
ちゃんとした書籍買って読むといいと思うよ
その辺順を追って説明されてるから >>288
社員番号、入社年度、年齢、性別とか沢山の項目があるなら構造化する
ひとつならたいして意味ない。ただし項目によってはValueObjectにしたほうがいいかもしれない。
で、入社年度から在籍年数をクラス内で計算してgetできるようにするとか。そういったロジックをクラスに用意する。
ただこういうクラスの場合はsetを使うより
コンストラクタで渡すほうがよい。
で、get; private set;
にする >>298
今はコンストラクタで初期化するならprivate setは不要 わかったよ
入門者はget setに注目してるから、訳がわからなくなるんだな
大事な方は、データの塊の持ち方であって、取り方入れ方は副産物
本来はgetって書いてあるから取ってるんだねって一発でわかる様になってたが、今は書かない様になったから、getメソッドのメリットが薄くなってる 根本的な疑問は
プロパティじゃなくて(公開)フィールドで良いんじゃないか、ってことじゃないのかね >>302
恐らくその通りだと思うけど、聞いてる方も答えてる方も
コミュニケーション能力が低すぎてなんか滑稽なことになってるねw
そして、これが肝心だけど、そういうことなら普通
こんなところで質問する前に「プロパティ フールド 使い分け」
とかで検索する。
getsetの壁とか訳わからんこと言ってることから分かるように、
この質問者さんは普通の人がまずやることを何もやってない。 俺がコミュ症とはひどいなぁ(文才が無いだけ)
人生口先だけで生きてきたよ
それは置いといて
質問者は「Mainの中にint p=32」と言ってる時点で、データ外出しに気づいてないなと思ったよ >>288
この例ではpを表示してるのは確認の為で主目的ではないね
プロパティはクラスのフィールドみたいな物
フィールドはクラスの変数で、寿命はクラスを作ってから破棄まで
例えば、個人情報のクラスなら住所や電話番号がフィールド
いくつかの理由でフィールドに直接アクセスするのは良くないとされている
つまり
✕personal.phone=09012345678とかnum=personal.phone
○personal.SetPhone(09012345678)やnum=personal.GetPhone()
でも下の表記はクラス側にSetxxx/Getxxxを書かなくてはならず詰まらないコード量が増える
そこでC#は呼出側は上の記述が使え、クラス内では最低限のコード量で書くプロパティが考案された 以前は{ get; set; }って記述は出来なかったよね。
必ずprivateの保存先に読み書きしたり、なんかロジックとか固定値で値を返したり。
さらにラムダ式とか多様な定義が出来るようになったから、着いていけない人も居るのかも。
自分も自信ない。無駄な書き方してないだろうかと。 ここは
>「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」
だからな
>>288は、まずプロパティという概念を理解できているのか?
そしてそれがC#ではどのように実装されるのかを理解できているのか?
(今のC#のプロパティにはいろんな書き方ができるのでわかりにくい)
その上でフィールドとの使い分けなら
クラスの外部に公開するものはプロパティにする
単純に値を格納するだけのもの以外はプロパティにする
が基本方針だと思えばいい アルゴリズム云々じゃなくてとりあえずコーディングの練習したいときの手軽な問題って何があるかな?
今は競技プログラミングの簡単な問題を最近の記法使いつつ解いてるのだが他に何かあれば知りたいです Debugger.Breakメソッドってリリースビルドで落ちますか? とりあえず
Debugger.isAttachedで解決しました 作れるけど自分で使う用ならPythonの方がいいよ 完成するまでの時間を考慮すればペイするよ
初心者がC#で完成させるのは不可能だから、速度はゼロだ Pythonとjupyter notebookですぐに欲しい結果が出せるのが良いよね。
実効速度で比較する意味はないってことか。 そもそもグラフィカルなアプリは人間の知覚や操作がボトルネックになるので、単純なコードの実行速度にはあまり意味がない アプリの設定情報の保存がイマイチよくわかってない自分。 <ブックリスト>
<アイテム id="11">
<タイトル>XML</タイトル>
<筆者>鈴木</筆者>
<カテゴリ>1</カテゴリ>
</アイテム>
<アイテム id="22">
<タイトル>WORD</タイトル>
<筆者>田中</筆者>
<カテゴリ>2</カテゴリ>
</アイテム>
</ブックリスト>
こんなxmlをID指定で読みたい。ID 22ならば、WORD、田中、2が得られるように。
調べると下のようなものが出てきました。指定で読み込みたいのでforeachでなく読んだ結果を直に欲しいです。(foreachの中身のような)
IEnumerable<XElement> infos = from item in xml.Elements("??") select item;
foreach (XElement info in infos){
info.Element("タイトル")
info.Element("カテゴリ)
}
指定で読むにはどうしたら良いですか? findByIdはないです
なんで無いのかは知らないです
実用性を無視した意味不明なこだわりを持ってるライブラリ設計者っていますけど、たぶんその類だと思いますね
別の言語ですがElementTreeの設計に関しても似たような後継を見ましたね
XMLは変な設計者を引きつけるのかも知れない XPathで一発じゃんか
Linqはコレクション向けの機能だからな >>321
読んでみないとわかんないじゃん?
だから全部読むよ
id=22だけっつったって
ネスト入りのテキストである以上全部読まなきゃどんな構造かわからんよの >>321
bs = BeautifulSoup(xml, features='lxml')
for item in bs.find(id='22'):
if type(item) != bs4.element.NavigableString:
print(item.text) bsのfindはリストやシーケンスを返さないよ(Tag or Noneを返す)
よってTypeErrorで動かない Ruby, Nokogiri では、XML もHTML のように使える。
CSS セレクターも使える
require 'nokogiri'
doc = Nokogiri::XML(<<EOT)
<root><books>
<book id="1">
<title>one</title>
</book>
<book id="2">
<title>two</title>
</book>
</books></root>
EOT
element = doc.at_css( "#2" )
puts element.at( "title" ).content #=> two 初心者だけどVBAのノリでgosub return使おうとしてコンパイラにエラー出されて悩んだ
goto使えるんならこっちも使えてもいいじゃん >>321
var doc = XDocument.Load("BookList.xml");
var item = doc.XPathSelectElement("//booklist/item[@id='22']");
Console.WriteLine(item.Element("title")); >>328
ローカル関数やラムダ式は使えるよ。
どうでもいいけどGoSubなんてまともな人はVBAでも使わないよw
そんなのは80年代の遺物だ 質問失礼いたします。
0.5秒間隔に、3回連続で2枚の画像を交互に表示させたいのですが、2つ目の画像しか表示されません。
開発環境はVisual Basic Studio、言語はC#です。
プログラムは下記の通りです。
どうぞよろしくお願いいたします。
private void button1_Click(object sender, EventArgs e)
{
Timer timer = new Timer();
timer.Interval = 500;
timer.Start();
int count = 0;
pictureBox1.ImageLocation = @"ファイル名";
pictureBox1.ImageLocation = @"ファイル名";
if (count < 3)
{
count++;
}
else
{
MessageBox.Show("終了");
timer.Stop();
} >>331
何が悪いとかのレベルじゃない
特定の行でF9でブレークポイントが設定できデバッグ実行を止めることができる
その後F10で一行ずつデバッグ実行を進めることができるから想定している動きになってるか確認することから始めた方がいい >>328
特定の処理を呼んで返したいなら、メソッドに切り出せば良いんじゃないのかな。 >>331
private bool mIsBusy = false;
private async void StartSlideShow()
{
if (mIsBusy) return;
mIsBusy = true;
var dir = @"C:\Windows\Web\Wallpaper\Theme2";
var names = new[] { "img7.jpg", "img8.jpg", "img7.jpg", "img8.jpg", "img7.jpg", "img8.jpg" };
foreach (var name in names)
{
var path = System.IO.Path.Combine(dir, name);
pictureBox1.ImageLocation = path;
await Task.Delay(500);
}
mIsBusy = false;
} >>330
いや、寧ろGoSub使わずに一つのサブルーチンにすべてを書くやつがコボラーの亡霊です ローカルメソッドはどうなんだろうね
外出せばいいじゃん派と他で使わないならローカルにしとけよ派で争うのかな >>331
>>334ががっつり趣旨に沿ったコード書いてくれちゃってるので解決かもしれないけど
>>331のコードだと2つ目だけ表示されるのは正しい動作だぞ
コードとしてはボタンが押されたらタイマー設定のみ行って画像1を表示
待ち時間なく画像2を表示(同じものに上書きしているので結果として画像2だけ表示)
countは常にメソッドの中で初期化されるので永遠に終了ダイアログは表示されないし
timerも止まらない
イベントメソッドも存在しないのでTimerクラスを使った意味がない
っとプログラムとして成立していないよ >>334
原型とどめてなくてわろす、でもそうじゃないんだ if (mIsBusy)と returnの間にスレッドが割り込まれたら複数動いちゃうんじゃね・・。 StartSlideShowはUIスレッドでしか呼び出されない前提だから問題ないよ 他人のコードにケチつけずにはいられない、嫌われる人。 VisualStudioスレで質問しましたが回答を得られなかったのでこちらに投げ直します、よろしくお願いします
c#でWindowsFormのForm1(大きさ以外全てデフォルト)に
richTextbox(大きさ以外全てデフォルト)のコントロールを張り付けて以下のコードを実行
static void Main()
{
Application.Run(new Form1());
}
表示されたrichTextboxにイメージをペーストすると強制的に縮小されてしましまいます、richTextboxのサイズに依存せずすべて同じ大きさになります
どうして等倍で表示されないかの理由と等倍にする方法、又は倍率指定をする方法はありますか?
※キャプチャ画面 http://up-img.net/img.php?mode=jpg&id=22425
参考1:vb.netでも同じ現象が起きます
参考2:クリップボードのイメージを縮小してからペーストしたところ画像は小さくなるのですが拡大してからペーストをしても同じ大きさのままで一定の大きさを超えることはありませんでした
参考3:イメージのハンドルをマウスカーソルでつかんで大きさを変えることは可能です テトリス作ってるんだけどおもしれー
もしググったら洗練されたコード出てきちゃってつまんなくなるから一切調べない方向で行く
オブジェクト指向って何ですか?っていうとんでもなく酷いコードなんだけど、とりあえず力尽くで作ってみる >>342
再現できんなあ。
コピー元アプリの方で縮小してるんじゃないの?
その問題のクリップボードの画像は、他のアプリ、例えばペイントにペーストした時には
ちゃんと原寸大でペーストされる?
画像サイズがデカい時、ワードパッドだと横幅に合わせて縮小されるけど、
RichTextBoxにそんな気の利いた機能が実装されてるとも思えんけど >>347、348
ペイント、エクセルでは等倍になりましたがOneNoteは少し小さくなりました
確かにDPIが関係していそうな気がするのでそのあたりを調べてみますね >>349
色々試してみたところ画像ファイル(jpg)を直接ドラッグしたりコピペした場合には画像が小さくなって、ペイントに一度貼り付けたものをコピペした時は等倍になるようです
つまりクリップボードの中身がファイル名だとなぜか縮小されて、イメージファイルだと正しくコピーされるようです、理由は解らないですがちゃんとイメージをコピーしていない自分のミスでした、すみません
ありがとうございます マカーが作った画像じゃないの?DPIが72になってるやつ。
Windows標準は96dpiだから、同じ300ピクセルの画像でもdpi情報が72か96かで変な挙動した記憶がある。
テストに使ってる画像を右クリックして詳細タブの「水平/垂直方向の解像度」の値みてみ。
それとテスト画像を96dpiで作られてるもので試してみるとか 右クリックしてプロパティの詳細タブね
中段くらいにあるの「水平方向の解像度/垂直方向の解像度」 >>351
私もそう思って色々なDPIのファイルを試したのですけど全て同じ挙動なんですよね、大体は96か300あたりでした
逆に72は今のところはないようです
とりあえずPictureBoxに画像を読み込めば等倍でいけるのでそれで代用するしかないかなと考えています 再現はしたけど、解決方法は分からないなあ。
間接的な方法ではこんなのがあるかも。
1) RichTextBox の中に PictureBox を貼り付ける
2) コピー元によっては期待通りになるなら、一度別のコントロールに貼り付けた後にそこからコピペしてみる
RichTextBox.Rtf プロパティをどうにかするって投稿もあったけど、自分にはどうにもならなかった。 だから最初から言ってるけど、コピペにしろD&Dにしろ、まずソース側を疑うのが普通でしょ。
何でそれをやらないのか不思議でしょうがない。
ソース側がサムネイルを提供してるならサムネイルが表示されるのが正常な動作で受け取る側では
どうしようもない。
少なくともデータがビットマップなら勝手に縮小するような仕様になってないのは確かだ。 疑うソースがないからでは。
新規作成のプロジェクトに RichTextBox を張っただけで再現したし。 >>342の人がソース側(コピー元)に使っているアプリがそうなっているか分からないが、
コピーやドラッグ操作が行われた時、デスティネーション側に提供するデータが
(1) 元画像のファイル名
(2) その画像のサムネイル
この2つを含む時、ペーストまたはドロップされる側のアプリがどちらを優先的に受け取るかによって
何が表示されるかは異なってくる。
>>350に書かれているような現象が起こるとしたらこういう理由でしょうね。 >>359
ありがとうございます、350です、確かにクリップボードをみてみると同じjpgファイルでも
ペイントに表示させてからコピーしたものはイメージの形式がCF_DIBになっていて
エクスプローラからコピーしたものはCF_HDROPになっていました
予想ではrichTextboxはこのデータの形式によって挙動(優先順位もそうですが)が違うようで
CF_DIB(BITMAP)形式のデータを渡してあげないと等倍にはしてくれないようです
ここまでは教えて頂いて解ったのですがじゃあどうするかというとかなり難しいようで
スキル的にさっぱり解らないので今回は何か他の方法を検討してみようと思います
※ちなみにPictureBoxに表示させてからコピペしてもダメでした 普通にエクスプローラからコピペとかドロップしたら、ファイル名が表示される気がするんだが
詳しい環境と手順書いてくれ RichTextBoxのEnableAutoDragDropはデフォルトfalseだから、そもそもドロップできないってのはおいといて
エクスプローラからRichTextBoxに(JPEG)ファイルをドロップやペーストしても
ファイル名が表示されるだけで、そこに画像が表示されたりしないだろって言ってるんだが
俺の環境だけか? AppendAllTextとアクセス権についてお詳しい方いらっしゃいましたら教えてください。
今、とあるテキストファイルに対しデータを追加するコードを書いています。そのファイルのアクセス権は少し特殊で、上書き保存は許可せず、データの追加のみ許可しようと考えています。
OSはWin10ですので、ファイルのセキュリティの詳細設定から、データの書き込み許可のチェックは外し、データの追加の許可はチェックしてある状態です。
その状態でファイルに対しAppendAllTextを実行すると、ファイルのアクセスが拒否されたとのエラーが発生してしまいます。
StreamWriterやFileStreamを使ってデータの追加を試みても同様の結果でした。
実行アカウントが正しいことはWindowsIdentityから確認済みで、操作対象のファイルに対しデータの追加権限があることもSecurityManagerのIsGrantedで確認しました。
また、データの書き込みを許可するとエラーは出なくなります。
以上の現象は仕様なのでしょうか?
データの書き込みを許可せずにファイルにデータを追加する良い方法は無いでしょうか?
長文になり申し訳ありませんが、教え頂けると幸いです。 >>367
許可は与えているのでできないのはC#側の仕様かと思い込んでいましたが、先程Pythonで同様の処理をしようとしても同じくエラーでした。
アクセス権はあるはずなのにできない理由が不可解ですが、C#固有の問題では無さそうなのでスレ違いでした。
お騒がせしました、ありがとうございました。 試さずに書いちゃうけど、
>>366のはFileStreamのコンストラクタでfileModeに「FileMode.Append」を明示的に指定した場合に限っては
エラーにならず意図したとおりに追記書き込みが出来そうな気がする
File.AppendAllTextのソースを軽く見た限りは
https://referencesource.microsoft.com/#mscorlib/system/io/file.cs,d673bcd88b09d5b8
の
https://referencesource.microsoft.com/#mscorlib/system/io/file.cs,4ff1446b33bdfb6b
って感じで細かいパラメータを指定せずStreamWriterを開いてるから
暗黙のうちにFileMode.Open(=追記に限らない汎用的な書き込み要求)でファイルを開こうとして
エラーになってるんだと思う cmdで
echo AAA >> hoge.txt
とかやってもダメだねw
そもそも「書込み不可」なのに「追記可能」というのは矛盾しているようにしか聞こえない。
ググって↓の記事とか読んでみたがどうも判然としないね
https://milestone-of-se.nesuke.com/sv-basic/windows-basic/kind-of-permission/
逆に「書込み可能」と「追記不可」という組み合わせに意味があるってことなんだろうか? >>369
やってみたがFileAccess.Writeを指定してオープンできへんので
当然FileMode.AppendもNG >>369
スレチで終わってる話を蒸し返す
C#名物教えたがりマン 皆様ありがとうございます。
長くなりすぎて書くのを省いてしまったのですが、FileMode.Appendと明示しても駄目でした。
書き込みは既存の内容を変更するための権限と思っていたので追記は単独で機能すると考えたのですが、追記するにも書き込み権限が必要になるようですね… あーできないんかー
FileStreamの初期化処理見てみたら何かわかるかなあと思ったら
歴史の積み重ねというかなんとも泥臭いソースだった・・・
https://referencesource.microsoft.com/#mscorlib/system/io/filestream.cs,76ef6c04de9d0ed8,references
ファイル開く処理って当たり前だけどWin32APIなのね えースレチなの?
C#で書くソースでもNETFrameworkAPIの仕様についての話になるようなテーマはこのスレで書いちゃだめなのかあ
こんなんで教えたがりマン呼ばわりされちゃうのかあ >>375
.NET APIの話ですらなく、NTFSの話だから完全にスレチ
上書き保存を禁止したファイルには追記もできない また下劣な交通整理マンが威張ってるのかw
ほんとバカだよなこいつ このバカの論理を厳密に適用したらこのスレの大半の質問はスレ違いになる。
そもそも>>366みたいな質問で誰が困るのかね。
だーれも困りゃしねーよバーカ。
単にお前が他人にケチを付けたいって卑しい動機で言ってるだけだろ馬鹿臭い。 >>378
え?ファイルシステムとC#なり.NET Frameworkなりにどんな関係が?
>>378の言うことを疎漏に適用したら5chにスレは一つで良いってことになるけどその境界は? フルコントロールを外す
変更、書込に許可
特殊なアクセス許可で削除、ファイルの作成不許可だったかな 諸先輩の方々にご教授願いたい事があり、質問させていただきました。
皆さん、アプリを作成する際のアイコンはどこで仕入れてらっしゃいますでしょうか?
ツールバーのアイコンのセットを購入したいのですが、どこで皆さん買われてますか?
教えてください🙇🏻 例外処理をどうするべきか教えて下さい。
処理の流れは以下です。
@DBサーバーに接続
Aサーバーにクエリを投げてデータ取得
A取得したデータをFormのDataGridViewに反映
この場合、通信不調が原因で例外が発生しそうな場所は、
@接続タイムアウト
Aクエリ送信後に通信不調が発生しデータ取得不可
Bデータが取得できなかった場合にNullReferenceException
だと思っているのですが、どこでtry catch処理してユーザーに通知するべきなのでしょうか? >>384
NullReferenceExceptionが出るのはバグと見做すのが普通であり、明示的にnullチェックして例外を発生させないようにすべき
そもそも例外は個別に処理しないのが基本であり、ユーザーへの通知なんか最終的にはApplication.ThreadExceptionイベントでやればよい
その上でメッセージを出し分けたいとかリトライしたいとか個別の事由がある場合には処理に適した場所でキャッチして処理する
個別にメッセージ出したいならクリックのイベントハンドラなどUIの一番大元で処理するのが適切だろうな >>384
なんか抽象的過ぎて結局何が聞きたいのかよくわからない気が。
tryブロックをどこに書くべきかって話ならもちろん普通は発生個所に書く。っていうか、
通信が絡むならリトライする関係で必然的にそうなるよね?その上で必要ならそのまま再スローするか
ラップしてスローする。
リトライなんかしなくてもtryブロックはいちいち発生個所に書かないとダメ。なぜならどこで例外が
起こりうるかなんてだいたい理解しているのはそのコードを集中して書いてる時だけですぐに忘れるから
エラーメッセージの表示は誰の仕事かという意味ならそれはもちろんUIの仕事で疑問の余地はない。
あと間違ってるかもしれないが、↓の記事にあるような集約的に例外をトラップする機能は
プログラマが想定してない例外の発生(要するにバグ)を想定して使うものであって
手抜きのために使うものではないと思う。
https://www.atmarkit.co.jp/ait/articles/1512/16/news026.html 終了処理がないなら例外は一番外側でcatchすればいいかな?
一番外側ってのはformでいうclickメソッドみたいなのね
終了処理が必要なとき
つまりDBの更新処理なんかに失敗したとき例外でぶっ飛ばしちゃうと
Rollbackができないのでcatchが必要
よくやる間違った組み方で
例外=エラーとして組んじゃうと
上記のようなときにエラーをうまく伝搬することができない
例外は本当に想定外の受け皿
ある条件下で起こることがわかっているものはエラーとして処理するとうまくいく >>389
>Rollbackができないのでcatchが必要
using TransactionScopeするといいよ >>390
うーむ、DBのcompleteと
一連の処理の成功が
完全にイコールの場合はいいけど
最後にファイル書き込み&メール送信
失敗したらRollback
みたいなときは注意が必要だな
大抵はうまくいくけども
だからこそ落とし穴になるというか
システムにガッツリ入れ込むんじゃなくて使わないときの選択肢はほしいな >>391
>最後にファイル書き込み&メール送信
>失敗したらRollback
それはファイル書き込みやメール送信が成功した後に
DBコミットが失敗するケースを考えないといけないから設計も運用も煩雑になるよ
DBコミット後にEventual Consistencyで対応したほうが楽
特にメール送信はキューへの書き込みくらいまでしかトランザクショナルに処理できないので
DBのトランザクションとは分けたほうがいいケースがほとんど 質問失礼します。
いろいろ調べてこちらのコードを書いてみたのですが、実行するとForm1_Loadの中身が反映されません。
まだHello World くらいしかやったことがないので本当に初歩的な質問かもしれませんが、どうぞよろしくお願いします。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
this.TransparencyKey = this.BackColor;
} >>393
この記事を読んでもらった方が早いねたぶん
http://dobon.net/vb/dotnet/help/eventhandler.html
イベントの「正体」はデリゲートというものを理解するまで理解できないと思う。
デリゲートは初心者にはなかなか理解しづらいと思うので、今は理解できなくてもそのうちわかると
気楽に考えた方がいいと思う。気にするとたぶん挫折する。 教えて下さい。
List<List<string>> lstA = new...(略
for( 0から複数回ループ ){
List<string> lstB = new ...(略
switch aa{
case 1
lstB = 代入 break
case 2
lstB=代入 break
case 3
lstB = 代入 break
}
lstA.AddRange(lstB)
}
コード売る覚えですけど、リストの中にリストをぶっこみたいんですけど、未割り当てでdefaultがないと怒られるんですけど、例外がない場合ってどうしたらいいんですか? 不本意かもしれないけどいずれかのcaseをdefaultにする
or
defaultブランチを書いてcontinue 適当な例外投げとけばバグも見つかって一石二鳥
default: throw new InvalidOperationException(); 最近はSwich文を全く使わなくなったな
List<string> lstB = aa swich{
1 => 代入,
2 => 代入,
3 => 代入,
_ => new ...(略,
} その前にListの階層からして使い方が適正なのかが怪しい気がする
AddRangeするけど省略されている "代入" がちゃんとそういう内容なのか 真面目に質問しているようには見えんねw
こんな過疎スレでつまんないネタ展開して何が楽しいのか俺には理解できない。
普通にスベってるし ファイルフォーマットや電文にenum入れたクソがいて
文字列で保存されてたり
数値で保存されてたりして
グチャグチャなんだけど
enumの値ってどうやって保存しておくといいの? c#側はEnum.Parseとか言うのがあって
数値も文字列もいける?らしいけど
受け側からふざけんなクソがって言われてる
こんなの使ったばっかりに >>403
> ファイルフォーマットや電文
一番最初に決める事柄だろ… enumは何も悪くないような・・・
普通は数値じゃなく文字列でシリアライズする C#側でenumをシリアライズしたなら皆数値になるんじゃないのか
ファイルや電文に文字列や数値が混在するのはそのフォーマットの問題やんけ >>403
別に揚げ足取りとかじゃなく、何がベストな方法かは要件次第なので、
要件をオープンにしたままで何がベストって言われても誰も答えようがないと思うよ。
なんか半年ぐらい前にもenumなんかイラネーって持論を展開してた人が
おった気がしたけどひょっとして同じ人だったりするんだろうかw booleanはtrueかfalseであって、文字列でも0/1でもない。 true/false も文字列も 0/1 も真偽値の状態を表す状態や表現でしかないけどな。 >>414
但しここはC#スレ
bool値はtrue/falseを取る >>413
だからフォーマットを決めとかないとコンバート時にオレオレ変換されるってはなしだろ >>413
せめて
> ファイルフォーマットや電文
の話であることぐらいは理解しようよ ValueObjectって構造体とクラスどっちがいい?
デフォルトコンストラクタを禁止できないからクラスにしてるけど
パフォーマンスを考えると構造体にしたい >>419
ValueObjectは一般的にはDBやバックエンドAPIが裏にあり、オブジェクトの生成や破棄のコストはDB操作やWebリクエストに比べれば完全に無視できる
そのため制約が多くORM等のツールとの相性も悪い構造体をあえて採用する理由はないから、議論の余地なくクラスを採用すべき
DBが裏にないんだったらそもそもレールを外れているのでもはや一般論で議論しても仕方なくて、ユースケース等を考慮して君の頭で判断したらいい visual studioでデザイナーからマウスポチポチして部品を設置するのと
コードを書いて部品を表示するのはどっちがいいのでしょうか? >>421
両方やればいいじゃん。
中身を理解できるからコードを書けばいいし、
判んなくなったらマウスで配置しちゃえばいいのさ。 >>421
マウスで1ドット2ドット移動調整すんのめんどくさくなって今はコード
TextBoxを10ドット長くしたらその右のTextBoxも10ドットマウスで動かすなんてやってられんわ >>424
デザイナ使った方が圧倒的に楽なんですがそれは 質問させてください。
ある特定のライブラリを使わなくてはいけなくて、そのメソッドは引数にrefが付いているものになります。
このメソッドに渡したいのは不変の値(constの意味)となります。
不変の値自体は別クラスに用意してあって、各所で使いまわしたいので読み取り専用のプロパティかstatic read onlyで定義したのですがrefが付いた関数に渡そうとするとstaticなものは渡せない、型が適していないとエラーとなります。
public constのような記述はすべきでないと見たことがあるので避けたいと思うのですが、初期化以降で変更を受け付けず、かつ各所で使えるようにして、参照渡しのメソッドも使えるようにするにはどのような方法が考えられますでしょうか?
分かりにくい説明で申し訳ありません。 どうもこうもないのでそのメソッドを呼び出すときにいったんローカル変数に移す そのメソッド、アホが作ったんでなければ何かの条件で値を書き換える可能性あるんじゃね?
ローカルに移す refパラメータはこいつを書き換えるぞという合図なので読み取り専用の変数を渡したらだめ
バグの原因になる >>427です
ありがとうございます。
そうか、1度ローカル変数に入れれば良いのですね…思いつかなかった。
具体的には制御装置と通信、データ操作する為のライブラリです。
自分は装置データの参照(○○という制御データの値を取得)しか利用するつもりは無かったのですが、よくよく考えれば、プログラム上で値を保持し続けて、そのデータを更新したりする場合には値を書き換えるのでrefでも良いのかもしれません。
もう一度マニュアルを読み直してみます。 なぜC#にはメソッドの const 修飾が無いのか >>432
自分で書きましたが違いますね…
○○ってデータを取ってこいという○○の部分は文字列としてメソッドに渡す仕様になっているのでデータそのものは変えていません。
やっぱり特別な意味があるのかもしれません(ないかもしれません)ので改めて確認してみます。
何度も書き込んですいませんでした。 普通は意図をもって引数にrefを付けてるはずでしょうw
もちろんメソッドを書いた人が何か勘違いしてる可能性もないことはないが、普通は考えにくいよね。
いずれにせよ、refの引数を取るメソッドに対して
(1) 定数やリテラルを渡したい
(2) refによる「戻り値」は必要ない
こういうケースは普通にありえる。 TryParseで真偽値だけで要件満たす場合とか普通にあらあな
そもそもこの話は
* 無理なんでラッパメソッドでも噛ましてください
* そんなに気になるなら作者に質問してください。ここは作者の気持ちを予想するスレッドじゃないんでね(文系板に行くといいと思うよ)
で終わってる >>436
あんまり意味がある質問と思えんけど例えば
// EnqueueとDequeueを同時にやる
bool TryEnDeQueue<T>(ref T inOUt> {...}
こんなメソッドがあったとして、キューにリテラルを
突っ込みたいケースは普通にありえるし、
キューから取り出した値は必ずしも使わない(キューの要素数を変えたくないだけ)
というケースもありえるだろう。 TryParseって基本TryParse(xxx, out yyy)だろ?
定数渡すのはxxxだし、そもそもrefなんて使ってなくね? >>438
> // EnqueueとDequeueを同時にやる
そんなメソッドが普通にあるって?w 値渡しではなく参照渡しであることを明記するキーワードのつもりで「ref」を書いてるとかじゃないかな
そういうクソみたいなコードのライブラリを平気で売ってる会社も世の中にはごまんとあるぞ >>441
const修飾が無い以上、表現として分かりやすいと思う VisualStudioで、C#を使ってプログラムを作成しています。webview2で待機する方法が見つからず困っています。
どう調べても出てこないので、ヤフー知恵袋で聞いてみましたが、回答をいただけず再投稿中です。質問の仕方がよくないのかもしれないですが…。
どうかよろしくお願いします。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14245327539 俺も初心者だけど、頑張って非同期処理学んだよ
非同期処理ってネット接続前提のプログラム書くなら避けて通れないんじゃね・・・(と思って俺は頑張った いろいろ勉強したら解決しました。すみません。ありがとうございました。 >>446
そういう時って解決した方法を書いて残した方が良い ブラウザを貼るって通信できないとき放送事故みたいな感じだな
webアプリでデータだけとって画面表示は自前にせんと商品に見えんな C#ってC++より速度遅いですか?
処理量多いともっさりするって聞いた気がするんです >>451
遅い
だから速度に頼った実装はできない
画像処理なんかで速度が動作に関わってくるところは
思い切ってc++で組んでもいいかも?
データ移すのに時間かかってて意味なかったよってあるかもしれんが 動作速度と開発速度のどちらに振るか
まあ好きな方でやればいいんじゃね UIをC#、
高速化の必要なロジックはC++とかでもいいんじゃないの
最近色んな機械の監視装置とか作るけど、
監視してアラートを上げるところまではC++にしてるよ >>451
ボタンのイベントハンドラ内に処理を全部突っ込んで、ボタン押した時にウインドウが「応答無し」になったのを見て
「C#ってモッサリしてるんですね」って言ってる人を思い出した
ライブラリ使わずに自前で画像処理とかするのでもない限り、C#は十分な速度が出るよ
むしろヘタにC++で車輪の再発明されるより、C#でうまくライブラリも活用してくれた方が処理速度も開発速度も早いことが多い
まあ、コンパイラの最適化を超えるような本気で書かれたC++にはもちろん勝てないけど、そんなことができる人はここでそんな質問しないよね
(自分でベンチマークして確かめるから) >>454
それよく言うけどUI部分でこそ差つくんだよな
WinFormsやWPFでGUI作るとコントロール上でマウス動かすだけでメモリがんがん増えてくしな
OnMouseMoveとか呼ぶたびにオブジェクト生成してるからだと思うけど >>456
UIなんか人間相手に間に合えばいいんだから、遅くなっても構わねーだろ >>457
今後動画のFPSが6を超えなくなる呪いをかけたw
画像関係は「七難隠す」って言われるぐらい
速度が重要だよ スレッドセーフじゃないメソッドを擬似的に非同期に見せるためにメッセージループみたいな仕組みを作りたいんだけどなんか簡単な実装方法ってないかな?
非同期キューと無限ループするスレッドを作ってぐるぐる回す的な実装なら作れるんだけど
スレッドが落ちた場合にどうするか、ループぐるぐる回すとCPU無駄じゃないか、でもDelayで待つのもTask大量生成して勿体無い気がする、、、
みたいに考え出すとよくわからなくなった
思考停止して使えるライブラリがあるならそれ使いたい >>460
ちょっと何を言ってるのか。
スレッドセーフとは不特定のスレッドからの呼び出しで問題を起こさないこと。
非同期とはメソッドの処理が呼び出し側と別のスレッドで実行されること。
この2つがどう矛盾するのかさっぱり。 >>460
backgroundWalker が脳筋でも使える IObservableとかでうまいことできんかな? >>461
非同期処理は単に処理の終了を待たないだけで必ずしも別スレッドは必須じゃない
非同期処理≠並列実行
時間分割のマルチタスクで同じスレッドで実行されるかもしれない >>464
C#でわざわざ自分でノンプリエンプティブの
タイムスライスを実装する人っているの?w
OSも乗ってないマイコンの組み込みじゃないんだから スレッドプールのスレッドで他のスレッドで長い処理しててしかも一つしか空いてなく、かつ最大スレッド数に達してスレッド数増加できなかったら
同じスレッド使ったりとか >>460
キューにBlockingCollection使えば、キューが空の時に待機してくれる >>467
あれキューに入ってから取り出して処理する間に論理コア全て使われてたら処理待つのかな? >>465
タイムスライスではないけど
同一スレッドで非同期はCompletionTaskSourceで割とやる
ウィンドウが閉じたら完了になるTaskとかね >>465
c#どうこうじゃなくて一般的に非同期処理って別に他のスレッドを使いますって言ってない
ノンブロッキングなものが非同期であるだけ
初心者が非同期処理を並列処理そのものと勘違いするから嘘を教えないで欲しいだけだ >>471
もう言ってること無茶苦茶w
逆である。
「一般的には」マルチスレッドを使って複数の処理を並列に走らせることを非同期という。
VBAみたいなマルチスレッド非対応の環境で疑似的に複数の処理を並列に走らせることを
便宜上「非同期」と呼ぶことはあるいはあるかもしれない。
しかしそれはあくまで括弧つきの「非同期」だ。
一般的な非同期ではない。 >>472
> 「一般的には」マルチスレッドを使って複数の処理を並列に走らせることを非同期という。
プログラムとデバイスで処理を並列に走らせるのも非同期だよ
お前の一般的の世界が狭すぎるだけ >>473
SendXXに対してPostXXを非同期と言ったりもする。
だが>>460はそんな話はしていない。
頭痛いバカだな。少しは文脈を考えてくれ。
こういうバカ、自分がくだらない揚げ足取りをやっている自覚が本気でないんだろうか。 単純に処理がブロックされるかされないかなのでは?同期・非同期って グーグル先生
同期処理では、あるタスクが実行している間、他のタスクの処理は中断される方式です。 非同期処理は、あるタスクが実行をしている際に、他のタスクが別の処理を実行できる方式になります。 >>474
お前は自分が「一般的には」と書いたことも忘れたのかよ
> こういうバカ、自分がくだらない揚げ足取りをやっている自覚が本気でないんだろうか。
でかいブーメラン刺さってんぞw >>472
jsはシングルスレッドだぞ
C#より一般的な言語だからシングルスレッド非同期は一般的とも言える jsはVB6と同じくマルチスレッドをサポートしていない特殊な環境だからね。 なんでスレッドにこだわってるの?
VB6もJSもマルチプロセスで走らせられるよ Async/Awaitはマネージスレッド使ってるケースのほうがむしろ少数派じゃないの
ネットワーク、DB、ファイルIO、どれをawaitしてもマネージスレッドはほとんどの場合シングルスレッドだよ インスタンスをもりもり作ってて思ったのですが、プログラムが実行されているコンピュータにインスタンスが作られているんですよね?
クラサバならクライアント
webサーバならwebサーバに >>460だが結局Channelで実装したよ
Awaitしやすくて便利やねChannel
もう非同期コレクション要らないんじゃないかな
ぐるぐるスレッドが例外でも補足できないレベルで異常終了したら
どう回復すんのかわからんけどそんなこた無いだろうということで妥協 まあ、c#のお手軽非同期処理って使ってあるところだいたいバグってるよね
スレッドが2つあったら
単位時間あたりの処理の分け前って一体どうなってん?
って計画されてない処理はだいたい本番であの世行きなんだけど
引数にそんなのいれるとこないしねw データベースとの接続やデータのやり取りはEntityFrameorkを使う事が一般的なのでしょうか?
SQLを書くやり方と、EntityFrameorkを使う場合の切り分ける基準はどこになりますか? 開発生産性かな。
テーブル構造がコロコロ変わる開発初期段階でEF使うととっても楽よ。
コードファーストなEFが勝手にDBを変更してくれるから別途DB管理ツールがいらないのでC#のみに集中できる。
すでにかっちりとしたDB(テーブル)があるモデルファーストなら、速度面重視でEFよりdapperかな
EFは機能がリッチな分、テーブル内の大量レコードを扱うと速度面不利なところがある。
小規模人数しか使わないシステムならEFでも全然アリ。
不特定の数万人が使うシステムならEFで初めて方針が固まったところやボトルネック部分を
dapperに置き換えるか、巣のSQL文にしていく。 >>487
今なら迷わずEFでいいと思う
更新系はEF即決
参照系もほとんどEFでいい
生SQLも実はEFで発行可能
マイグレはEFしか選択肢がない try-catchの外からcatchの中にgotoでジャンプって出来ないのね
逆にcatchから抜けるのは出来るみたいだから同じ処理2回書かなくて済んだけど、
ifやループの中にジャンプはできて何故これが出来ないんでしょうか 例外オブジェクトが必須だからだろ
throw;とかどうすんだよ そしてこれは多分まずい
空文字をゼロにできても
ゼロを空文字には戻せないから
また、元からゼロのモノと空文字だったものもどう判別するのか?
まあ、普通はやんね
仕様から見直す必要があると思われる Ruby on Rails ではデフォルトで、Active Record と言う、O/R マッパー
Web 系では基本、SQL インジェクションされるから、
文字列を結合して、SQL文を作ってはいけない
Place Holder を使っているなら、エラーにされるから良いけど >>487です
>>488
>>489
ありがとうございます。
早速EntityFrameworkを使用してみました。
コードファーストでDBを作成し、visual studioのSQL Serverオブジェクトエクスプローラー上でもDBが作られている事は確認出来ました。
ただこのデータベースはSQL ServerのSSMS上に表示されていません。
SSMSから見れないのが仕様なのでしょうか? >>492
エスパーだけど文字列を空白で分割したいならばString.Splitとか使えって話ではない? int x = 0;
x == 0
x.Equals(0)
x is 0
なんで3つも書き方があるんだ? C#初心者用のスレだが、
コンパイルできる事くらい確かめてから質問しろよ。
なぜ3通りあると思ったんだ? >>492
あー、前ゼロ付けたいのね?
外出先のスマホだから調べにくいけど、Formatとかの書式変換みたいなの調べれば良いと思うよ。
ただ空白をゼロにするだけならリプレイスで。 ナイスジョーク!
お前の顔の造形くらいには面白いな int変数 is 0って書けたっけ?
isって型チェックのみだろ? .net frameworkと.net coreの2種類ありますけど
.net coreで作った場合、プログラムを動かす環境に.net coreをインストールしてもらわないと動かないのでしょうか? >>503
マジレスすると
他言語からの移植がしやすいようにするため
片っ端から機能を取り込んだ名残
そして意味不明なc#特有のお便利新機能はすべて
他言語への移植妨害 色んな言語で各社負けじと機能を取り込み&追加したら一つのことやるのに複数の方法があるようになった
ように見える(´∀`*)ウフフ >>503
機能は同じでも仕様の由来というか系統が違うんじゃない?
x == 0 は通常の比較演算子。
x.Equals(0) はメソッド。
自分で比較の条件を組んでIEquatable<T>でオブジェクトに等価性判断の実装したりとか。
ぶっちゃけ、自分で組んだら比較した振りも出来てしまう。
x is 0 はパターンマッチングとかいう奴かな。自分はよく理解してない。 == も再定義できるよ
is は悪乗りしすぎ
x is 2 or 3 or 5 なんて書けたりする >>516
== はC言語
Equals はC#
is はVisualBasic(さかのぼるとCOBOL風?)
って感じではないか? >>510
.NET Frameworkが何もなしに動くと思ってそうだなあ Windows10 May 2019 Update以降なら.NET Framework 4.8が最初からインストールされてるので
ほとんど気にしないで良くなった >>510
Core系(.NET5以降含む)は基本的にWindowsに入ってないことを前提にするのが正しい
頻繁に更新されて全部サイドバイサイドだから、利用者にインストールを要求するのもやめた方がいい
デスクトップアプリなら>>511の言うようにランタイムを丸ごとぶっこむ方式の一択と考えていい
実行環境の.NETランタイムに依存していいのはWebアプリなどでデプロイ先のマシンが完全に自分の制御下にある場合のみ
デプロイ時のファイルサイズを抑えるためのキャッシュみたいなもんだ 昔は確かにそうだったけど、去年から月次アップデートはMicrosoft Updateで配信されてインプレースインストールできるでしょ? コンソールアプリでHtmlを取得するプログラムを試しています
ちょっと古いのですが、勉強のため、DownloadStringAsyncを使っています
完了処理を登録したイベントハンドラがうまく動きません。理由はどこにあるのでしょうか?
static void Main(string[] args)
{
var uri = new Uri("https://www.yahoo.co.jp/");
GetHtml(uri);
}
static void GetHtml(Uri uri)
{
var client = new WebClient();
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
client.DownloadStringCompleted += Client_DownloadStringCompleted;
client.DownloadStringAsync(uri);
}
private static void Client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
MessageBox.Show(e.Result);
} DownloadStringAsyncではなく、DownloadTaskAsyncを使った場合はHtmlをちゃんと取得できています。
(文字化けにはまだ対応してませんが)
static void Main(string[] args)
{
var uri = new Uri("https://www.yahoo.co.jp/");
var result = GetHtml2(uri);
MessageBox.Show(result.Result);
}
static async Task<string> GetHtml2(Uri uri)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
var client = new WebClient();
var result = await client.DownloadStringTaskAsync(uri);
return result;
} >>527はawaitしてるのに>>526はawaitしていないから>>528となる >>528,529
ありがとうございます
Mainの最期にConsole.Readline();を入れたら動きました
よく見たら自分の使っているテキストにもこれが入ってました
見落としていました
DownloadStringAsyncはawaitには対応していないということなので、>>526をawaitを使って書きかえることはできないという認識でいいですか? >>530
すまんDownloadStringAsyncの仕様を確かめないで妙なレスをしてしまった
それであってます .NET Frameworkはもう先がないので今新規開発するなら.NET 5一択
.NET Frameworkからの移行は手間がかかる >>532
VSのアプデがうまくいかなくて.NET5導入失敗してます
ちょっと調べてみます
>>534
自分でたまに作るショボイアプリでは使ってます
ただ、今みたいに適当にググってなんとなく使ってるとわけ分からなくなってくるので
頭整理して、基本的な雛形作っておこうかなと 移行に手間とかかかるか?
大抵は.net4のものは、net5にそのままコンパイル可能だと思うのだが。
Reflectionの深い機能使ってない限り。 どのWindowsにも.net frameworkが最初から入ってるっていうのは長所だと思うんだけど
.net core以降ではその長所を棄てるということなのか? 俺はフレームワークのプレインストールは要らないと思うな
シングルバイナリとランタイム依存版をセットで提供するだけ
ランタイム依存版は使いたい奴だけ使えばいい
そいつは解ってる奴だからランタイムも自分で勝手にインストールするはずだ
解って無いやつは何も考えずにシングルバイナリでいい
解ってるけど多少の労力を支払ってまでランタイム依存版を使うほどリソースに困ってない人もシングルバイナリでいい >>538
その辺よく知らんのだけど、昔のスタティックリンクとは違うわけ?
つまり、実質的にまったく同一のバイナリが複数メモリーを
占有するようなことは起こらないような仕組みになってるん? >>539
仕様上はどうなってるか知らんがメモリには別々にロードされるんじゃないかなと思う
殆どの場合はその程度のリソース消費は気にしなくていい
特にDNFがプレインストールされてないとトラブるような情弱にはリソース使用量の最適化とか縁のない話
こいつらには細けぇことはいいからシングルバイナリ使っとけ!でおk
なのでフレームワークのプレインストールは要らない
リソース使用量を最適化してマシンを限界まで使い倒すぞ
なんていう連中なら苦もなくランタイムとランタイム依存版バイナリをインストールして使うはずだ
だからやっぱりプレインストールされている必要はない 実行環境と抱き合わせて配布とか
そんなことするんならもうPythonでええやんってなる Windowsにフレームワーク入ってるの助かるわ
ネットに繋げられない環境でもcsc.exeとメモ帳でアプリやゲーム作れるから 単一かつ自己完結は実行開始までが遅いからコンソールには向いてない。
フォームだとReadyToRun含めるとウィンドウ表示するだけで100メガあるうえ、起動までi9900KSでも3秒かかるっていう...
よほどnet5の機能つかってるとかでないと、.net frameworkの方が向こう5年は取り回しがしやすい。 .net coreにうまく切り替えられるとは思えないな >>540
なるほど結局スタティックリンク的な資源を富豪的に使う方法なのかな >>537
それが逆に.NETの進化を停滞させた、とMSは考えているようだ
まあ元々は.NETってWindowsの基幹になるはずだったわけで、その目論見が頓挫した時点でもうWindowsにバンドルする理由はなくなったんだよ >>547
そう
DNFってことはどうせウィドウズデスクトップだろ
富豪マシン前提でなにも問題はない WPFの二の舞なら前環境が15年残ることになるな
素晴らしい >>554
やっぱり .NetFramework 5.0をリリースするは Win11製品出荷の頃には.NET6が公開予定だろ
標準かオプション機能あたりで載せてくる気がする >>548
進化というと聞こえはいいけど、サポートを長く続けたくないってのもあるんだろうなぁ。
今でも長期サポートするアプリケーションなら.NET Frameworkの方を検討するだろうし。 VB6がずっとサポートされているから.NET Frameworkも同じようにサポートされ続けるだろ 開発環境はサポート切れてるが、ランタイムの動作はサポートされてるはず >>563
誰もVB6を推してなんかいないだろう
間違った情報が指摘されただけだろうに >>564
別に指摘に対して言ったわけでもないが
そういうところ嫌われるよ >>563,565
推してるとかどこから出てきたんだよ
単にVB6が今でもサポートされてるなら.NETFrameworkもサポートされんじゃね?
って話だろ
人が嫌われるかどうか心配する前に自分の理解力を心配しなよw >>566
流れに対して言ったんだぞ
理解力がどうとか、そうやって他人を攻撃しようとするところは良くないぞ? 言ってる言葉が全部自分に向かってるという、エッシャーの騙し絵みたいな奴だなw えへへ
これでスレ違いのVBの話題は終わったやろw severityがcriticalじゃなければセキュリティパッチも出ない状況を
「サポートされてる」の一言で済まされるとモヤるな こう言ってはなんだけど、「サポート」されているかどうかは
営業面では重要な意味を持つけど、大半のエンジニアにとっては「それが何か実質的な意味を持つのか?」
っていうのが率直なところじゃないの? VB6推しなんて流れもないし
> そういうところ嫌われるよ
が他人への攻撃じゃないと思ってるのかよ…
そもそも>>563がいなきゃそのまま終わってた話だろw >>570
少なくともセキュリティパッチが出るんならサポートはされてるだろ
サポートレベルの話はまた別問題 .net frameworkはwindows updateに入ってるから勝手にセキュリティの穴や不備も塞がるが、
.netの方はどういう対策予定になってんの?
プログラム無知な個々人さえわざわざあの.net5のランタイムを細かなアップデートに合わせて取りにいく想定なの?
あるいらアプリ作者がこのランタイムの細かなアップデートに合わせてアプリ再配布する想定なの? Windows Updateのオプションの他のMS製品の更新プログラムを受け取るを有効にしたら
.NET 5や.NET Core 3.1のセキュリティアップデートが適用された
インストーラーで入れたやつだからかな 基本的に作者の責任だね
.NETに限らず、ライブラリをスタティックリンクしたりDLLを同梱したり普通にあるでしょ
デスクトップアプリが使ってるライブラリの脆弱性が問題になることなんて実際まず無い
そんなことを気にするよりREADMEにパスワード使いまわしはやめましょうとでも書いて啓蒙活動でもしたほうがよほど効果あるよ .NET Core 3.1インストールしてたはずなのにいつのまにか5になってた。あれはWindowsUpdateなんかな。 そもそも.NET5って来年2月でサポート切れてWindowsUpdateによる更新もされなくなるし、今後出るであろうLTSでもサポート期間は3年しかない
セキュリティアップデートなんて真面目に気にしてたら塩漬け運用は不可能だ
幸いにもアプリにスタティックリンクされたランタイムやライブラリの更新って組織のセキュリティポリシーでは見過ごされがちなんで、
サポートの切れた.NETランタイムのインストールをユーザーに要求するよりはSCDの方が面倒なことになりにくいだろうね さてここで、繰り返そう
>>532の発言内容
>.NET Frameworkはもう先がないので今新規開発するなら.NET 5一択
>.NET Frameworkからの移行は手間がかかる 正直ここ数年は.NETもC#も片手間以下にしか触ってなかったので
CoreってWindows 8の時代のPCLの延長線上のもの、要するに
最大公約数的なサブセット(要するに使えねえ)って認識だったんだけど、そうでもないのかw >>538が正解じゃないの
どっちかだけってのがユーザーに不便強いてるよね 変な質問だけどオフライン環境下でしか使わないアプリとかでも.netの更新はしなきゃいけない? 電文パケットを全て破棄出来るなら
要らないんじゃね?
工場レベルで汚染ってニュースもあるので
そこいらはクリアされてる前提で C#でアプリ作れるようになったらC++で応用って効きますか?
C++でただ球が跳ねつづける画像とかパックンみたいの作ってみたくて学習始めたんですが
ロベールのコピーコンストラクタ辺りで何してるのかよくわからなくなってしまって それはC#もよく分かってないんじゃないかな
C#で値型と参照型を正しく理解していて、C++ではそれぞれがどう表現されるかが分かれば、
コピーコンストラクタがなぜ必要でどういう挙動をするかは自明なはず C#とC++は全く別物
そりゃプログラミング未経験から学ぶのに比べればメリットあるけど
せいぜいその程度 >>587
文法が似ているとかデザインパターンの学習が無駄にならないっていう限度でなら応用が効くでしょう
しかし、それぞれの言語で難点となっている部分が全くもって別なので、学習が大変な部分には全くと言って良いほど応用が効きません 場合によってはC#の知識がC++習得の邪魔をするかも知れないね 何の言語もまだ習得してない素人なのですが、この目的だとC#あんまり意味ないですか。
本変えてもっかいC++挑戦してみます。ありがとうございました。 >>591
俺はC#からの類推で自然に馴染めたけどな
C#からC++へ行くときのハマりポイントって多分RAIIの辺りだと思うけど、
C#においてオブジェクトが今どこにあるのかを意識してプログラミングしていればそんなにギャップはないと思う C++だと学習のハードル高くない?
C#で取りあえず動くものを作りながら学ぶほうが良いと思う 初心者は、Ruby で、
まず、ファイル操作・文字列処理だけを学ぶのが良い
その後、他の言語をやるべき! 最終目的はC++の習得で、そのためにC#を学ぶことに意味があるか、
それともただ回り道になるだけで無意味かって意味なら、
まったく無意味とも言えない思う。
少なくともOOP的な部分については後発のC#の方が
いきなりキメラでカオスなC++でやるより理解が早い気がする。
案外最短コースはC→C#→C++かもしれんよ。
いや知らんけど。 C++, C標準関数, STL, MFC, ATL などなど覚えなきゃならない事がてんこ盛り ただ、C++のvectorとかあのあたりはC#でListをやってからの方が理解は早いと思う でも、今はC++敷居下がってる
俺もずっと前にやったとき挫折したけど、数年前にやったらいけた
俺がその間に経験積んだのも事実だが、modern c++ってすげぇc++で作りやすくなってた
c++20でとりあえず低レベルなコルーチンきて?
c++23でasync/awaitな高レベルなインターフェース用意されるのかな
どんどん使い安くなってると思う それでもまぁC#の方を先にやってからの方が楽だと思うな
C++だとややこしいからとりあえずどうでもいいこととかに足をとられたり
するかのしれない C++もany variant optionalなどが入ったからある程度はc#のマネージな考え方に近づいてるが、
今から始める人にはchar*とwchar_t*とwstringとstring に加えて u8string やu16string など文字列系がカオスだろなぁ。
しかもdll作る際は結局はインターフェースはプリミティブ型だけしとかないと、
まともに使えないdllになるから、テンプレートや新規に入った型も限定的な環境でしか役にたたんしw >>604
そうそれ。c++選択肢多いから、俺みたいに細かい人が最初やるには向いてない
文字列の話だって.netならutf -16の標準stringを取りあえず使っておけばいいけど
c++だとどのエンコード使おっかなとか下らない事で悩んで先に進まなくなる 自分の場合、Windows の GUI アプリ作りたくて C++ 始めたけど、プログラム知識ほぼ 0 の時に、C + API と、C++ + MFC のGUI アプリのサンプルソース読んで一回諦めた。
C# 始めてから C++ 始めたことで救われた。
細かい所を確認しながら進めないと気が済まない + 目標までのハードルがめっちゃ高いと感じると心が折れる。
こんな人は、C++ の前に C# やるべき。 C++にあっさり挫折した過去があるワイでも、C#だとそこそこに使えて助かってるわ >>606
俺もそうだわ
C++はWINAPIだの仮想デストラクタだのと意味不明なお約束があまりにも多すぎて習得できる気がしなかった
C#の後だと重要なところと後回しでいいところの区別がついてすんなり入れたな 自分はWTLでGUIアプリ組んでたな
C#は食わず嫌いだったけど今はC#だけだな BorlandのC++builderでは作れたけどMFCアプリは作れなかったな
C++じゃなくMFCに問題があるんじゃなかろうか? var test1 = メソッド1();
var test2 = メソッド2(test1)
var test3 = メソッド3(test2)
こんなふうに数珠繋ぎみたいに結果を渡していくやり方は作り方を見直したほうが良い?
メソッドの引数は値のコピーを渡してるから呼び出し元には影響ないのは分かるけど、どこでどの値を変えてるか分かりにくくなってバグを生み出しやすい作りな気もしてる
初歩的な質問で申し訳ないけどアドバイスいただきたい test1とかtest2に使い道がないならば
var test3=method3(method2(method1()))
でもええって話ではあるけど
要は間の処理がどうなっているかによりけりだと思う >>613
うん、良くないね
君も気付いてる通り、引数のコンテキストがどんどん肥大化してどこで何やってんのか分からなくなる典型的なアンチパターンだ
ほんとにそのテスト2〜3は引数に渡されたオブジェクト全体を使ってるの?
やりたいことは、
var c = new C { A = test2(test1.X), B = test3(test1.Y) };
だったりしない? >>613
いいと思うよ
例えばだけどこういうことだろ?
基本価格 = 基本価格取得();
割引価格 = サマーキャンペーン割引(基本価格);
税込価格 = 消費税加算(割引価格);
とてもクリーンで見やすいコードじゃないか
ただタイピングが楽になるからメソッドチェーンにしたい欲求はある
基本価格取得()
.サマーキャンペーン割引()
.消費税加算(); >>616
どこでどの値を変えてるか分かりにくくなりそうって言ってるから、単純なスカラー値ではないんじゃないの
var 注文 = 注文を取得();
var キャンペーン適用済み注文 = キャンペーン適用(注文);
var 送料計算済み注文 = 送料計算(キャンペーン適用済み注文);
みたいな感じと想像した >>614 >>615
やっぱり良くないか…
引数に渡してるものは部分的にしか使ってない
例えば100個くらいの配列を渡してこの中の10個くらいしか使ってない
>>616
これはこの内容で良さそう
やる事が一貫してるというか意味が通じてるというか
最初に挙げた例と違って申し訳ないんだけど、実際にやりたいのはこんな感じ
数珠繋ぎとは少し違う、ごめん
@全装置データ = 装置A〜Zデータ取得()
A正常or異常 = 装置AデータDB書き込み(全装置データ)
B正常or異常 = 装置BデータDB書き込み(全装置データ)
.
.
.
C正常or異常 = 装置ZデータDB書き込み(全装置データ)
D正常or異常 = 装置へデータ書き込み(全装置データ)
メソッドに渡すのはコピーとはいえ、@で取得したデータを色んな所へ渡して使い回してて、どこかで値が変わってしまう可能性も含んでる作り方なのかなと思って>>613の質問に至ったの >>618
結局何が聞きたいのかどうもよく分からないな。
>>613みたいに一時的な説明変数に戻り値を入れるのは
一般論としては何も悪くない。
引数で渡した参照型の値が破壊されるのを心配するなら(そんなのほとんどの場合杞憂だと思うけど)
適当なインターフェイスをかぶせてそのインターフェイスとして渡すか、
イミュータブルにするだけじゃないの? >>618
装置AデータDB書き込みは全装置データのうち装置Aのデータしか見ないってことか?
だったらそりゃ装置Aのデータだけを引数に渡したほうがいいわな >>617
その場合はその業務は誰の知識なのか?に注目する
メソッドの引数と返り値をスカラーにした場合、そのメソッドの「呼び出し側」が
1 引数のエンティティから適切な属性を取得し、2 メソッドを呼び出し、
3 引数そのものあるいはクローンに対して適切な属性を更新する
方法を「知らなければならない」
例えばサマーキャンペーン割引のロジックが「注文の合計基本価格が10000円以上、注文明細のどれか1つでもキャンペーン対象商品フラグが立っていること」だったらどうだろうか?
メソッドの呼び出し側はきっとこう思う筈だ
俺は注文をサマーキャンペーン割引して欲しいだけなのに、
なぜかサマーキャンペーン割引に合計基本価格と注文明細のキャンペーン対象商品フラグが必要だという業務知識を知らなければならない
ただ黙って割引してほしいだけなのに、なんで俺が適切な情報をいちいち与えてやらなければならんのだ
そんなのはサマーキャンペーン割引の責務を担うメソッドが知っているべきだろう >>618
この場合もまずは責務を明確にしてメソッドを分けるといいよ
1. オンメモリのデータセットから特定のデータを正確に抽出する責務を担ったメソッド
2. 単にデータをDBに書き込む責務を担ったメソッド
つまりこういうこと↓
a = Aデータ抽出(全データ)
b = Bデータ抽出(全データ)
…
z = Zデータ抽出(全データ)
結果A = リポジトリA.save(a)
結果B = リポジトリB.save(b)
…
結果Z = リポジトリZ.save(z)
結果All = リポジトリAll.save(全データ) >>618
>A正常or異常 = 装置AデータDB書き込み(全装置データ)
これって異常ならどうするの? >>618
メソッドの引数として渡したパラメータを書き換えないというのが基本
コピーして渡さないといけないメソッドとして作られてしまってるのが問題で、更新日時とか何かしらの書き換えがあるならその結果を別途返すべき
メソッドのパラメータとして全データを渡すよりそのメソッドが使う必要最低限のものにしといた方がわかりやすい
まあ、条件にマッチしないデータは無視するという動作でも不自然じゃないからそんなに重要なことじゃないかな レスくれた人ありがとう
貰ったアドバイスを自分なりにもうちょい整理してみる
>>622
細かくなるけど必要なもの毎に処理を分けるってことだよね
自分みたいな素人目線だとこういうのは小さい処理が増えるのが煩雑に感じてやるのは躊躇するけど一個一個が独立してるしこの方が結果的に良さそう >>626
そういうの好きだな。だから、結果的に>>613になっても俺的にはおk。
メソッド名を見れば判るようになるし。 AWS LambdaをC#で使ってる人おる?
DIの正しいやり方がわからん
ググると
FunctionクラスのデフォルトコンストラクタでServiceCollectionをインスタンス化して
Serviceを追加して解決してprivateフィールドに代入
的なコードは出てくるんだけど
なんか無理矢理感があってすごく気持ち悪い
ASP.NET CoreのControllerみたいにコンストラクタインジェクションしてくれればいいんだけどAWS LambdaのFunctionはそういうのないのかな 謎のランタイムが勝手にどっかで注入してくる方が気持ち悪いわ
Azure FunctionsなんかだとAzure側のランタイムがASP.NETと統合されてて注入できたりするけど、依存関係地獄になりがちでぶっちゃけ糞
Lambdaはその点余計なこと一切しないから単純明快で楽だ
そもそもLambdaごときにいちいちDIなんか要らんわ
FaaS使うんだったら差し替えはFunctionレベルでやるのが基本だよ WindowsってPowerShell以前はコマンドラインシェルが貧弱だったから、開発者は伝統的に何でもかんでもアプリケーションコードの箱庭内でやってしまう傾向があって、
Azure Functionsの設計思想なんかもそういう箱庭コーディングの文化を引き継いでいるところがある
対してAWSは小物をシェルで組み合わせて使うUNIX的な文化の色が強くて、Lambda関数もコーディング環境というよりはあくまで「ちゃんと単独で機能する小さなコマンド」なの
その中でさらにドメイン切って差し替えられるようにして、みたいな発想はしないんだよ すまん自己解決したわ
AWSオフィシャルのLambda/ASP.NET Coreアダプタがあるらしい
まあそらそうだよなDIもまともに出来ないとかゴミサービスでしか使えんし 最終的に保守のしやすいコードが一番ってことになりそうだ どうでもいいけど、状況判定に
if(HogeButton.Text == "あ" && !int.TryParse(HageButton.Text,out _))
みたいにコントロールのテキスト使いまくってるクラス見つけてしまった。
明日から犯人探しかな・・・ どうでもいいけど、状況判定に
if(HogeButton.Text == "ほ" && !int.TryParse(HageButton.Text,out _))
みたいにコントロールのテキスト使いまくってるクラス見つけてしまった。
明日から犯人探しかな・・・ 数学の積分で使うSの大きなやつって
for文なの? Σはforだが(といってもΣの方が遥かに高速な訳だが)
∫はforではない >>639
Σも普通は解析的に答えを出すので、数値演算(ループ)を連想するのはかなり違うと思う forの解釈として毎回実行時計算する言語ならそうだが
forでもコンパイル時にΣやΠが解析的に完了してる言語があっても良いだろう
C#スレだからどうでも良いけど 解析的に求めるっていうのは例えば等差数列の式から
その和の公式を導出するようなことを言うんですよ。 いやいや、解析的っていうのは数値計算の対義語みたいなもので「数学的に解く」
みたいなニュアンスだと思うから数学屋さんはあまり使わないと思うよ知らんけど。
情報屋の言い回しだと思うよ。
俺は大学のアルゴリズムの講義でニュートン法とかやった時に聞いたのが最初の気がする
先生はもちろん情報工学の先生だ >>639
高速って何よ
数学記号のΣとプログラムの制御構文のforで、概念が違うものをどう比較したのさ ビジネスが破綻する大半の原因は、 ”ビジネスを始める人の大半が、真の意味での
「起業家」ではなく、 起業したい、という熱に浮かれた「職人」として働いているに過ぎない。”
という事実にあります。
「職人」によって運営されているビジネスは、ビジネスが働くのではなく、彼ら自身が毎日働くこと
によって、成り立っています。
彼らは毎日、自分がやり方を知っている仕事を一生懸命にこなしていますが、「起業家」としての
視点が無いために、成長に限界が生まれます。
そして、生計を立てるために、彼ら自身がずっと働き続けないとならないのです。
誰もが必ず陥る罠
私が見ている限り、起業熱にうなされる人たちは、必ずと言ってもよいほど誤った
「仮定」を置いてしまうようだ。実は、のちに彼らが苦難の道を歩むことになるのは、
この、「仮定」が致命的に間違っているからなのである
致命的な仮定とは・・・「事業の中心となる専門的な能力があれば、事業を経営する能力は
十分に備わっている」ということである
私がこの仮定を致命的だと書いたのは、この仮定が間違っているからにほかならない
事業の中で専門的な仕事をこなすことと、その能力を生かして事業を経営することは
全く別の問題である。高い専門能力を持つ人にとって、独立は他人の為に働くという苦痛から
解放されるということを意味していた。それにもかかわらず、前提となる「仮定」が致命的とも
いえるほど間違えているために、彼らは自由になるどころか、自分が始めた事業に苦しめ
られるようになってしまうのである
マイケルEガーバー「はじめの一歩を踏み出そう」P28~29 >>452
>>453
ありがとうございます
亀でスミマセン… SqlServerへの非同期クエリを、ORマッパー使わずにSqlConnectionとSqlCommandで送信したい場合、
Task.Run(() => sqlCommand.ExecuteReader())
と、
sqlCommand.ExecuteReaderAsync()
のどっちを使うのが理想ですか? ありがとうございます。
普通に考えたら後者なのですが、フォームのLoadイベント時に上記処理を実行するようになっており、フォームLoad時にサーバーとの通信異常が発生していた場合、
前者の場合はフォームが応答する状態のまま、1〜2秒して例外をキャッチ出来ます。
後者の場合はフォームが応答しなくなり、1〜2秒して例外をキャッチ出来ます。
それでちょっと悩んでましたが、後者にします。 WPFのバインディングについて質問です。
テキストボックスに読み取り専用プロパティをバインディングしたいのですが、
プロパティの値を変更してもテキストボックスに反映されません。
調べたら、プロパティの変更を通知するイベントが無いとだめとのことだったのですが、
setterなしでに通知イベントを実装する方法は無いでしょうか。
例:
public class ViewModel
{
public int ID { get; set; }
public string Name { get; set; }
public string NameSan { get => Name + "-san"; }
}
<TextBox Text="{Binding NameSan}" /> wpfでバインドできないプロパティは
DependencyPropertyでないから
DependencyObjectを派生させる必要がある
→UserControlを作ってそこにDependencyPropertyを作成する
ってググったら出てきた XAML側でNameをバインディングしてコンバーターで-san付けるかなあ >>664
NameプロパティのSetterでまとめて通知すれば良い
private string _name;
public string Name
{
get => _name;
set
{
_name = value;
PropertyChanged?.Invoke( nameof( Name ) );
PropertyChanged?.Invoke( nameof( NameSan ) );
}
} >>664です。
沢山の回答レスありがとうございます。
例として記入したものが不適切でしたので、訂正させてください。
実際はNamesanのgetterには別クラスから値を取得するメソッドが実装されており、
NameやIDはNamesanでは使用しないものになります。
public class ViewModel
{
public string NameSan
{
get
{ //別クラスから値を取得するメソッド}
なので、>>668様にご教示頂いた方法は使用できない形になります。 >>669
外のクラスだろうがやることは変わらない
外のクラスからNameSanプロパティの内容が変わるタイミングで同じように通知する
外のクラスを変更するのが出来なければタイマーで通知を出すなんて荒業も思い付いたけどいまいち >>670
>外のクラスからNameSanプロパティの内容が変わるタイミングで同じように通知する
ありがとうございます。外のクラスから通知させることができるのですね。
早速試してみたいと思います。
教えてくれた皆様、ありがとうございました。 なんでパターン崩してイレギュラーなことしようとするんだろ >>670
ちょっと訂正。忘れてた。
クラスの外からイベントを直接発生させられないから、ViewModelクラスに変更通知イベントを
発生させるメソッドを実装して、外のクラスからはそのメソッドを呼び出す必要がある。
public Class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void FirePropetyChangedEvent()
{
PropertyChanged?.Invoke( nameof( NamaSan ) );
}
} >>672
その時点でこのスレには相応しくないよね その外のクラスの変更通知を受け取って、自身の変更通知をだせばいいんじゃないのか
なぜわざわざ外のクラスが別クラスのメソッド呼ぶんだ?依存関係がおかしいだろ >>673
イベントで実装する必要性がよく分からないんだよな
FuncやActionでよくねって思っちゃう >>675
だね
Modelの値が変更されたらViewModelの値も変更してUIも更新したいってことだから
ViewModelでModelの変更通知をsubscribeしてsetter経由でPropertyChangedイベントを発生させてUIを更新すればいい
値の更新が必要にもかかわらず読み取り専用プロパティにする意味がよくわからない PropertyChangedイベントを発生させれば事足りるのだが
setter経由させる意味がわからん
そのために読み取り専用を読み書きに変えるのか? WPFなら仕方ない
嫌ならオワコンWPFなんか捨ててWebで仮想DOM系のフレームワーク使えば何もしなくても自動的に差分取ってくれるよ >>678
>PropertyChangedイベントを発生させれば事足りるのだが
どこで発生させるの? 適当にはこんな感じでしょ
model.PropertyChanged += (sender, e) => {
if (e.PropertyName == nameof(model.Hoge)) {
this.OnPropertyChanged(nameof(this.Piyo));
}
};
public string Piyo => $"OK {this.model.Hoge}"; PropertyChangedという言葉の意味を考えてみろ
setterにあるのが自然だろ
おまじないだよ考えなくていい そのためにわざわざ読み取り専用でいいプロパティにsetter作れってか >>684
よく勘違いしてる人いるけど、イベントの-edは過去分詞じゃなくて動詞の過去形
つまりプロパティが他者によって変更されたのではなくプロパティが主体なので、
setterによらず自発的に変更イベントを発生させたとしてもなんら不自然ではない イベントが過去形か受動態かについては議論があるよ
全部過去形だというのは明らかに無理があるw
どっちの場合もあると思うしそれでいいでしょ。
受動態>過去形>完了形
一般的な使用頻度はこうじゃないかな。
しばらく前からイベントに普通の名詞形を使う命名の仕方もあるよね >>688
それはあくまでガイドライン。
実態の話をしてるんでしょ。
例えばそこのページに出ているDroppedDown、
dropは自動詞だと思うので過去形だという主張はちょと無理がある >>689
droppedは過去形でよく使わんか?
an apple dropped down.とか
stock price dropped.とか。 何したいのかよくわからんけど
getterしか必要ないってことはそもそも画面に表示する必要ないプロパティじゃないの >>691
何を言っているのか意味がわかんないけど、自動詞って言葉の意味は分かる?
dropしたのはDroppedDownイベントを発生させるオブジェクトではないよね?
イベントを発生させるオブジェクトはdropしたんじゃなくて「された」んだよw
もちろん「何かが落ちた」という現象を通知するイベントなんだと強弁することもできるが、
これ言ってて苦しいでしょ(笑)不自然で無理矢理すぎる。
受動態だって考える方が100倍自然だ。
Clickedイベントとかも同じ。
これが過去形ならButtonが自分で自分をクリックしたのかとw
お前はクリックしたんじゃなくてされたんだろうがとw >>696
自動詞わかるよ?
なんで自制を使うかって理由が抜けてるんだと思う。
ネイティブにとってもそこはMSの方針いけてねえよなって思うところかもしれんのだと思うんだけど、MSはBeforeClickとAfterClickとかそういう接頭語を使ってイベント発火順を表して欲しくないんよ。
なので、Clickのあとに起こるイベントはClickedなんよ。
Click→Clicking→Clickedになる。 >>694
ViewModelでの話に限って言うと
setterを持っているってことはViewから入力があるという含意がある
(もちろんケースバイケースでそうでない設計にすることもある)
で、例えばViewのラベルで現在時刻表示するためにViewModelにNowTimeプロパティを用意したとして
Viewからの入力はないんだからsetterを用意するのはおかしいよね、ということ >>698
誘われてあっちを久し振りに読んでみたけど、ここよりも有意義なことが書いてある気がしてならない。 >>701
現在時刻は変化してくんだからprivateなセッターで値を更新して、プロパティ変更イベント発生させればいいんじゃないの? >>701
>setterを持っているってことはViewから入力があるという含意がある
ないよ
外部から呼ばれたくなければprivate/protectedなsetterを使う
現在時刻のような呼び出しのたびに変化するような値は一般的にプロパティにすべきじゃないよ
(DateTime.Nowとかあるけど、あれはMSも間違いだと思ってるらしい) 別にそれでもいいんだけど
現在時刻そのものはDateTime.Nowでとるじゃん(これがModelに相当する)
わざわざViewModelにDateTimeのフィールド置いたりとかする必要がない
ViewModelは単にDateTime.Nowを返すgetterを持つだけで充分
setter書いても実際には何もsetしないとか違和感バリバリだし >>704
> (DateTime.Nowとかあるけど、あれはMSも間違いだと思ってるらしい
ソースは? もとの話は他のクラスのプロパティから導出されるプロパティって話だったんだが >>705
それでもいいじゃなくて、どうクラスを設計するか
取得した時点でモデルプロパティ値が更新されたと見なす仕様なのか、リアルタイムで更新する仕様なのか
単に現在時刻をとれればいいのであれば、それはプロパティじゃなくてメソッドだし、プロパティ変更イベントを用意する必要もない 海外のクソライブライブラリ使うとたまにそういうレベルでメソッドになったりプロパティになったり
非常に邪魔くさい
DateTime.NowがDateTime.Now()になったりDateTime.GetNow()になったりDateTime.GetInstance.Nowになったり
コロコロコロコロ変えてくる
ドキュメントが整備されてないからインテリセンスで推測して変更するしかない >>702
向こうでやると初心者用スレに書かない人が現れて論破されちゃうから行きたくないらしいよ
ここで議論してる人はその程度って事 >>701
その含意はない
XAMLのModeプロパティでOneWayとか指定するようになってるし 俺ならModelの方にINotifyPropertyChangedを実装して、VMでは
ReadOnlyReactivePropertyで変更通知を中継するな アドバイスを頂きたいです。
簡単なCRUD機能を持ったコンソールアプリがあり、EntityFrameworkを使用してSQL Serverとのやり取りを行っています。
このSQL Serverのデータベースを年毎に個々に持ちたいという要件が出てきました。
テーブル構成等は全く同じで2020年のデータベース、2021年のデータベースをそれぞれ立てるという形です。
ただ、毎年この作業の対応は出来ないので、コマンドを叩くだけのような自動化をしたいと考えております。
理由として社内の事情によりvisual studioを使用する事が難しい点があります。
その為、アプリ側でDBとの接続情報を変更して発行しなおす事がハードルが高いため、可能であれば自動化したいです。
データベースの作成はSQL文を使用すれば良いと思うのですが、EntityFrameworkを使用しているアプリ側への対応として、「接続するデータベースが変更された場合」という部分はどのように対応してよいか分かりません…。
CodeFirst、ModelFirstどちらの場合でもデータベースの変更に対応するにはやはりプログラム側で変更するしかないでしょうか?
データベースを年毎に分けた場合、過去のデータを参照したい時に年毎のデータベースそれぞれのDbContextの情報を作成しないと行けないと考えるとやはり自動化は無理でしょうか…
当方素人レベルなので良い案も浮かばず、何か少しでもアドバイス頂きたいです…。
長文大変失礼しました。 sqlserverで1年に1回ジョブながせばいいのでは?
今年分のdbは常に'hoge'って名前にして、1/1 0:00にhogeをデタッチして名前変更。
でhogeを新規作成 >>715
ありがとうございます。
通常使用するのは「hoge」固定とし、年が変わるごとに「hoge2020」「hoge2021」のように名前を付けて別物として扱うということですよね。
私もこれなら行けるかもと考えていたのですが、例えば過去のデータを参照したい場合に「hoge2020」「hoge2021」の情報をアプリ側が所持していないので参照出来ないのでは…と思い悩んでいました…。(先程コンソールアプリと記述してしまいました、すみません。正しくはフォームアプリです) 変更した情報をhogeのテーブルに持ち、クライアントへ渡しては?
hogeのConnStrInfoテーブル
ID, db_name, year
1, hoge_2018, 2018
2, hoge_2019, 2019
3, hoge_2020, 2020
これをクライアント側で取得し、動的に接続先を切り替える。
efだとConnection Stringをこねくり回すのはめんどいかもしれないけど
他に方法が思い浮かばない。 >>714
DBが分かれていて、別のDBに接続するときに接続情報を切り替えるのは当然だと思うけどなんでそれがダメなの? >>717
ありがとうございます。
こんな方法思いつきませんでした。
知識が乏しいので、私にはかなり難しそうですがプログラム側で変更出来ないならDB側で工夫するしかないですね。
>>718
アプリはEntityFrameworkを使用し、既存のデータベースからモデルを構築しています。
年毎にデータベースが増えたとしてもvisual studioの機能を使用し、データベースの構造をモデル化すれば良いのですが、諸事情によりvisual studioの利用が難しい環境ですのでプログラム側を変更しなくて済むような別の方法を探しています…。
回答になってなかったら申し訳ありません…。 それってテーブル設計に変更があったら過去のデータベースも変更するの?
そこ詰めといた方がいいよ データベースが増えても構造が変わらない限りモデルは増えないけどどんなイメージをしてるのか気になる 新しいテーブルに既存のテーブルから正規化しつつ移行ってパターンで1回地獄見たな。
該当の既存のテーブルを、協力会社の古い基幹システムが使ってて、そっちが動かなくなった。 普通に作ってればDBの接続情報をプログラム内に固定でもってることなんてないと思うが
つか年度ごとに別DB作るとかそもそもの発想がもう普通じゃないかw まあソースベタがきは確かにないやろな
色々冷静な判断が出来ない現場なんだろう、知らんけど もしかしてパーティショニングの事を言ってる可能性。 年度毎にデータを残しておいていつでも出せるようにしてほしいみたいな客の言葉を
常識的なシステム設計を理解していないバカが鵜呑みにしちゃった結果だろ
ギョウムシステムにはよくあること 市販の会計ソフトだと年次ごとデータベースを分ける作りにしてるのはよくある
旧年度のDBはそのままにして新年度だけDB構造を変更できたり
確定処理後は読み取り専用にするのをアプリ層じゃなくDB層でできたりと
メリットもあるので一概に否定される考え方でもないと思う >>728
イベントソーシングはスキーマ変更の問題を解決しない
それどころか過去全期間に渡る全データのマイグレーションというとてつもなく面倒な作業となる >>730
知らんがな
イベントソーシングで何がどう解決するのかお前が説明しろ イベントソーシングなら過去のデータを全てそのまま維持しつつ年度ごと、それどころかあらゆる変化に対応可能
アペンドオンリーなので過去データは最初から読み取り専用
年度ごとにデータベースを分けるなんて間抜けなことはしなくていい スキーマ変更に対して取りうる戦略ってのはイベントソーシングでも基本的に同じ
読み取り専用にする話はイベントソーシングで言うと
確定処理後に過年度のイベントが入ってこないようにしたり
入ってきてもプロジェクション時に必ず除外するようなアプリを通す必要がある
アプリ層で処理するって意味では年度別にデータベースを分けずに各データに年度をもたせた場合と同じ この業界わけのわからない横文字技術で解決することっていっつも皆無だよね
単に下駄履かせてイキってるだけ >>733
>スキーマ変更に対して取りうる戦略ってのはイベントソーシングでも基本的に同じ
わからない
RDBではデータモデルの変更が発生すればスキーマを変更する
イベントソーシングはデータモデルの変更が発生してもアプリケーションを変更するだけ
つまりイベントの再生方法が変わるだけでデータレイヤは永遠に同じ
>読み取り専用にする話はイベントソーシングで言うと
>確定処理後に過年度のイベントが入ってこないようにしたり
>入ってきてもプロジェクション時に必ず除外するようなアプリを通す必要がある
イベントソーシングでは過去の状態を再生するにはタイムスタンプでフィルタするだけ
過年度の変更イベントが入っても過去の状態の再生には影響しない
>アプリ層で処理するって意味では年度別にデータベースを分けずに各データに年度をもたせた場合と同じ
単にタイムスタンプでフィルタするだけなのでアプリ層の仕事は存在しない そんな夢みたいな仕組みがなんのしがらみもなく完璧に動作するならみんな使ってるよ… 完璧に動作するんだけど大きなパラダイムシフトだから精神的抵抗orマイグレーション抵抗があってみんな食わず嫌いしてるだけ >データレイヤは永遠に同じ
イベントソーシングでは後からのスキーマ変更はすなわち意識高い系アーキテクトにとっては屈辱的な設計の破綻なので、
そうならないように属性を全部JSON型の列に突っ込むような緩いスキーマを採用する場合があるってだけだ
引き換えに失うものはC#プログラマならよく理解してるだろう
もちろんちゃんと型を付けて真面目にDBを使う選択もあって、その場合はよくある普通の取引記録テーブルと変わらん
スキーマvsスキーマレスの違いであり、イベントソーシングとは直接関係ないよ >>739
ビジネス要件は日々変化するのでスキーマ変更を屈辱と感じるのは古臭い考え方のおじさん達だけだよ
変化に柔軟に適応するために最適化した進化と考えればいい
なおデータレイヤがスキーマレスだからといってモデルがタイプレスになるわけではないことは知っておいたほうがいい
C#や類似の言語が持つ静的型の堅牢性はESでも依然として完全に発揮されるので安心していいよ そうかなあ
スキーマレスだとせっかくのnull許容参照型もあまり役に立たなくなるし、
おかしなデータが混入しててデシリアライズ時に型違いで落ちるとか日常茶飯事だったよ
マイグレーションによる停止が許容できるなら断然スキーマがある方が楽よ >>742
さっきも言ったようにESでモデルの静的な型安全性が損なわれることはない
notnull/nullableは依然として有効だよ
再生時に型違いで落ちるのが日常茶飯事というのは何を言ってるのかわからないね 初歩的な質問でごめん
EntityFrameworkで2つのテーブルをjoinするやり方を調べてると下のコードみたいに結合した結果を作るように書いてたのね
(book, category) => new{
Title = book.Title,
Category = category.Name,
PublishedYear = book.PublishedYear
}
もしbookテーブル、categoryテーブルが例えば100列ずつあって結合後に全要素取得したい場合はnew以降に全カラム分記述しなきゃいけない? var q = db.Books.Join( db.Categories, o => o.id, i => i.id, ( o, i ) => new { Book = o, Category = i } );
foreach(var row in q)
{
int bookId = row.Book.id;
int categoryId = row.Category.id;
:
:
}
まぁ不要なカラムを含んでいる分、使用メモリも増えるが。
生産性優先なら上記のように書くことも多々あり >>746
ありがとう
確認だけど、この部分で全要素をqに格納が出来て
var q = db.Books.Join( db.Categories, o => o.id, i => i.id, ( o, i ) => new { Book = o, Category = i } );
欲しい要素がある場合は後から個別に参照するって感じだよね
foreach(var row in q)
{
int bookId = row.Book.id;
int categoryId = row.Category.id;
:
:
}
LINQ難しい… テーブルの結合て、モデルの結合だよな
モデルの設計をミスってるとしか思えんのだが
ほんとにテーブルを結合したいなら生SQL流せばいいんじゃね >>747
そう。
Linq文は横に長くなりがちなので、一時変数は極力短くすることが多いのも難しく感じる要因かな。
やってるのはただのinner join
もうちょっと丁寧に書くと
using(var db = new HogeContext() )
{
// 欲しい情報
string bookName;
int bookPrice;
string categoryName;
// クエリ生成
var query = db.Books.Join( db.Categories, outer => outer.category_id, inner => inner.id, ( outer, inner ) => new { Book = outer, Category = inner } );
// 実際のDB接続とクエリ実行はforeach文に到達したとき
foreach(var row in query)
{
bookName = row.Book.name;
bookPrice = row.Book.price;
categoryName = row.Category.name;
:
:
}
}
情報取得だけならAsNoTracking()つけたりするから、さらに横に長くなる。 こんなトンチみたいなことするより
サクッとSQLでええわってならんの? スマートに書けませんか?系のスマートは究極的には人それぞれなものでね… EF使うようになってから明示的なJoinなんて滅多にやらないしな
今回のもdb.Books.Include(x =>x.Category)でいいし >>749
分かりやすくて助かるありがとう
EFで取得した値がnullかどうかをチェックってどうしてるの?
生のSQL書くやり方だと取得した取得したDataReaderをループで回して
while(reader.Read() )
{
for(var i = 0; i <= 10; i++)
{
if(Convert.IsDBNull(reader[i])))
{
testList[i] = 0;
}
else testList[i] = reader[i]
}
}
↑みたいにチェックしてnullだったら0埋めとかやりたい処理を書くんだろうけど、EFで取得した値だと上で教えてくれたように
foreach(var row in query)
{
bookName = row.Book.name;
bookPrice = row.Book.price;
categoryName = row.Category.name;
}
ループで回してもrow.Book.nameみたいに個別にアクセスしないといけないからnullのチェックはそれぞれの要素に対してするの?
わかりにくくてごめん WPFでcanvasに図形が追加されるたびにその状態を保存してUndoRedo機能を作りたいです
stack<t>にcanvasを入れれば実装できると考えていたのですが出来ませんでした
stackの中身を見てみるとcanvasが全て最新のものになっていました
理想
@図形追加
→stack1 canvas(図形一個だけ)
A図形追加
→stack1 canvas(図形一個だけ)
→stack2 canvas(図形2個)
B図形追加
→stack1 canvas(図形一個だけ)
→stack2 canvas(図形2個)
→stack3 canvas(図形3個)
実際
@図形追加
→stack1 canvas(図形一個だけ)
A図形追加
→stack1 canvas(図形2個)
→stack2 canvas(図形2個)
B図形追加
→stack1 canvas(図形3個)
→stack2 canvas(図形3個)
→stack3 canvas(図形3個)
this.canvasをstackにpopで格納しているのですが恐らく参照型になっている(?)のかと思います
どうすれば解消されるか教えてください >>754
stack2を作る時に、
var stack2 = stack1;とすると同じインスタンスを参照するのでstack1の追加が反映される
var stack2 = new stack(stack1);とすると別のインスタンスを参照するので反映されなくなる
という話であってるよね それができる人って、5chで質問しなきゃならんような事態には陥らないんだよね。 stackのインスタンスは1個だけです
Stack<Canvas> stack = new Stack<Canvas>();で宣言して
@canvasに図形追加後にstack.Pop(canvas)
→stackの中身1個目(図形一個だけ))
Acanvasに図形追加後にstack.Pop(canvas)
→stackの中身1個目(図形一個だけ)
→stackの中身2個目(図形2個)
Bcanvasに図形追加後にstack.Pop(canvas)
→stackの中身1(図形一個だけ)
→stackの中身2(図形2個)
→stackの中身3(図形3個)
少し書き直しました
これが実現したことです 連レス申し訳ないです
PopではなくPushでした stackにcanvasをpushしたあと、
そのcanvasは再利用せず、newして作り直してる? >>760
Redo(){
Canvas Newcanvas = this.canvas;
stack.Push(NewCanvas);
}
してます それは参照のコピーなので、stackに入ってる実体は全部一緒になる
stack.Push(this.canvas);
this.canvas=new Canvas();;
とやって新しい実体を作って、この上に図形を置いていく 添付図のような必ず始点Xが0からなる四角の座標List配列の重複部をチェックして配列を作り直したいんですけど、考え方がさっぱりなので教えて下さい。
@原点XYは四角の左下を押さえ、加工はXは右。Yは上への数値とし、マイナス数字はなしです。
(原点X) / (原点Y) / (加工X) / (加工Y)
・変更前
[0] 0 / 15 / 30 / 10
[1] 0 / 40 / 10 / 120
[2] 0 / 60 / 30 / 30
[3] 0 / 110 / 30 / 30
・変更後
[0] 0 / 15 / 30 / 10
[1] 0 / 40 / 10 / 60
[2] 0 / 60 / 30 / 30
[3] 0 / 90 / 10 / 20
[4] 0 / 110 / 30 / 30 >>764
・加工XYって何?
・変更前、変更後って何?
・表の[番号]は何?
・表の一行は何を表してるの?
・作り直したいって具体的にどうするの?
・そもそも重複部をどうしたいの? >>771
図だけ見るなら
Xの値が同じ領域のYの範囲を作成する
だけじゃね?
@重複なしのY範囲リストを作成する(矩形のor取ればできるはず)
A開始Y座標のXの最大値を求める
B元の矩形情報からAのY範囲を求める
Cリストに追加
DABCで次のY範囲を求める
以下ループ
みたいな >>764
パズルみたいでなんとなく考えてみたんだけどこういうことか
https://i.imgur.com/HHY6VFU.png
これが 変更前の四角形[0] の 「座標」とやらの考え方かな
んで[0]〜[3]の矩形が重なり合う部分を消去
残る矩形の「座標」を求める
変更前[1]の横幅がもっと広かったりするときれいに四角形が作れないけど
そういう場合は存在しないのかな
それとも別のルールで 「変更後」 の四角形をつくるのかな 今気づいたんだけどimgurって閲覧数でるのな
20分で16Views
おれが2回ぐらいブラウザから開きなおしてるとしても
こんな時間からここ見てる人結構いるのな >>771
X軸側を無視していいなら単純に
for i = 0 to 3
if [i+1].原点Y < [i].原点Y + [i].加工Y then
[i].加工Y = [i+1].原点Y - [i].原点Y
end if
next
でよくね? >>771
なるほど
ルール説明が不十分なんだけど、その細長い四角形の幅が10ではなくて50とかあったらどうなんの? >>773
Xの開始点が0じゃない場合は対応できる?
例えば真ん中らへんにある正方形(?)がちょっぴり右にズレてる場合 >>779
Xの開始点はゼロ固定なんじゃないかと思ってる多分 Xの開始点がゼロ固定出ない場合は矩形を作成するための優先順位のルールが必要になると思われる Y軸を底辺とみなしてX軸側に伸びる棒グラフのようなものと捉えて処理したら一応できた
Y軸で使う最大の値160を要素数とする配列を作る
棒グラフの高さ、つまり加工Xを要素として入れていく
んで、この配列を材料にしていろいろと・・・
ただ、変更前配列の、例えば [0] 0 / 15 / 30 / 10 の 10を1に変えるとまだエラー出ちゃうわ
つまらんところでつまづく
時間ないのでやめたー atcoderとかでありそうな課題だなと思った
やった事ないけど 元の矩形リストから各頂点のx, yをリストアップし、重複を排除して格子を作る
格子中の各矩形を走査し、元の矩形リストと衝突するものだけを抽出する >>764 のような質問の仕方を見ると、人に物事を伝える能力や単語の選び方って凄い重要だと実感する
回答者にナゾナゾ出してるんじゃないんだから、加工とか原点という意味不明な単語を使わずに
「左下の座標」「幅」「高さ」
で良いじゃない
あとアップしてある図は右端の縦線がないけど、左(変更前)と右(変更後)で違うというのは質問に関係あるの?
四角の重なりをどうにかしたいなら
System.Windows.Rect(またはSystem.Drawing.Rectangle)として全て総当たりで
IntersectWithで重なり検出したら何かする
Containsで完全に含まれることを検出なら更に何かする、で良いんでない なるほどそういう質問だったのねw
これ数学的に厳密なアルゴリズムを考えるのはきつそうだね。
与えられる座標が整数であり上限が確定している(例えば200)なら、
ファミコン時代のテレビゲームのBG面みたいに200×200のタイルでできた盤面上で
考えるのが簡単そうかな知らんけど 途中まで書いたけど面倒になってやめた
普通に順番に処理していけばいいだけだからそんなにきつくなさそう
https://dotnetfiddle.net/7Z8ngH >>786
宿題丸投げだからそういう聞き方になるんじゃないの 図形の交差関係は目で見たら一目瞭然だけどそれを排他的な長方形に分解する処理が
そんなに簡単とは思えんな
特に抜き出した排他的な長方形をその後どう扱うかが難しい。 気になって完成させちゃった
・変更前
[0] 0 / 15 / 30 / 10
[1] 0 / 40 / 10 / 120
[2] 0 / 60 / 30 / 30
[3] 0 / 110 / 30 / 30
もし[1]が↑じゃなくて↓だったら
・変更前
[0] 0 / 15 / 30 / 10
[1] 0 / 40 / 100 / 120
[2] 0 / 60 / 30 / 30
[3] 0 / 110 / 30 / 30
結果が
[0] 0 / 15 / 30 / 10
[1] 0 / 40 / 100 / 120
となるようなロジックで書いた なんか金属加工みたいな業界用語っていうか専門用語なんやな
x y 加工 で検索したら。 矩形の重なった部分のうち、xの低いほうの部分をカットするだけじゃないのか 結果見て思ったんだけど、
>>764に例示してある数値だと変更後に6個の矩形が出てこない?
これ、俺の結果↓
[0] 0 / 15 / 30 / 10
[1] 0 / 40 / 10 / 20
[2] 0 / 60 / 30 / 30
[3] 0 / 90 / 10 / 20
[4] 0 / 110 / 30 / 30
[5] 0 / 140 / 10 / 20
なんかおれ間違えてるのかな 問題文を素直に解釈するなら何個でもいい筈だろ
極端な話、長さ1の正方形に分割して重複を排除するだけでも条件は満たしてる
答えを1つに収束させたいならもっと強い条件が必要 >>796
>>771を見る限りでは横方向にカットしていくんぢゃね
ナゾナゾなんだからさー、そういうところ、くーきよもーよー たとえば加工x値が同じ図形は存在するのか?
存在するならそれらが重なってる場合は結合するのか分離するのか?
分離するならその規則は
加工xが同じ矩形が連続して出力されたらそれらを結合するのかしないのか
>>771はあっさり書いてるが他の未知の情報がありそう >>795
もともと提示されている数字と図形があってないんじゃね
数字が正しいのなら、それが正解な気がするなぁ
つかもうC#全く関係ないし
どっかアルゴリズムなスレかプログラムのお題スレか行けばいいんじゃね そんな簡単にできないってw
いろんなケースを想定してちょっと考えれば分かると思うんだけど
これが学校の宿題なら>>787に書いたような話だと思うよ >>804
だからそういう前提の宿題じゃないのと言ってるのよ
なぜなら実数前提だと単純なアリゴリズムで解けないから。
整数なら与えられたデータを使ってタイルにお絵かきして、
完成した「ドット絵」を排他的な長方形に分解すればいい。
これならそんなに難しくない。 コード書いてみればいいよ
https://i.imgur.com/ZJbWbLW.png
フォームアプリまでつくっちゃったわ (なにやってんだおれ >>805
加工っていうワードから
これ宿題じゃなくて仕事じゃね?って思う
そうなるとこれ整数でしかできないとヤバクネ?って思う >>807
横レスすると、>>771の画像を拡大反転すると
水溶液
電気分解
熱分解
など、化学用語
さらには採点の赤丸まで透けて見えたりするところから
学生なんだろうなーと >>808
普通に客先の妙なセミナーで似たようなプリント持ってる俺にはそれが学生要素かわからんな あー実数たぶんいけるなぁ
配列の要素数=Y軸、中身=X軸でやったけど、
ゼロと正の整数に限定されちゃう要素数をつかうのやめて
Y値の境目になる値とXの値をペアにしてデータ処理すればいけるわ
>>809
そういうもんかねー 宿題どころか仕事なら、なおさらこのスレで扱うのは不適切じゃねーか?
本人はトンズラしてるし「考え方」ってC#の質問ですらないし 説明、単語等々もろもろすみません。
宿題でもなんでもなく、私用のものです。
Xは0限定。数値は少数。Xが0以上で同じ場合は分解せず、合体して一つなどなどいろいろありますが、くれたレスを読みもう少し考えてみます。
コード考えてくれた方々、レスくれた方々ありがとうございました。 >>814
オメー、GUIまで作ったならグラフィカルに表示できねーのかよ >>816
せっかくだからxが0じゃない場合にも対応しよう >>816
重複してるように見えて汚いし
数値と対応した矩形も番号がなくてどれかわからんし
必要なもんまでないのは褒められない >>816
うーん、まず数値は右寄せが基本ね。
あと小数点、スラッシュも揃えて。
申し訳ないんだけどこれエクセルに出力できない?
それと、変換の文字がボタンと比べて小さすぎ。
フォームタイトルはちゃんと付けようね。
え?ロジック?動けばいいんだよそんなもん。
あ、レビュー記録票、書いといてね。 (#^ω^)ピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキピキ そこまでやったならgithubにでも上げてソース共有してあげてw 思い付きだと、データをリストに積んで、0番目と1番目以後を順次比較、重複があったら分割してリストに入れる
それが終わったら1番めと2番目以後を比較、以下繰り返し コードは汚くてお前らにコテンパンにこき下ろされるんで上げないけど、使ったロジックはこんな感じ
「変更後」の矩形はまるでY軸を底辺として、X軸方向に伸びる棒グラフのようだとイメージしてる
棒ひとつひとつの「高さ」が加工Xとなるわけなんだけど、これを求めるのに棒の「中間点」を使った
この方法を使うと、「変更前」矩形がどんな重複の仕方をしていても処理できる
詳細はpngで。ちょいでかいけど
https://i.imgur.com/iZGHuwg.png
ちなみに@でのY値は重複排除する
こういう図形絡みの問題って、視覚的には簡単そうなんだけど、
どんなイメージで捉えるにせよ、コードに書き起こせなきゃダメなんで
そこが難しくもあるし面白いところでもあるなぁ
もうC#な話題じゃないんですんません >>831
要は合成図形の「右側」を結んだ包絡線(じゃないけど)みたいなものを考えて、
その包絡線の「高さ」が変わらない区間を矩形として切り出すわけね。
確かに全部の長方形がY軸に張り付いてる前提ならこれでOKっぽいね。 多角形を直角三角形に分解する
アルゴリズムをC#で実装するには
どうすれば良いですか 1. アルゴリズムを探します
2. C#で実装します
3. 完成! DLLを読み込んで利用するやり方が細かく書かれている書籍を教えてください
やさしいC#で勉強したんですけど、このあたりの情報がないのです 参照として使うんじゃ無く、実行時に
ファイルがあるかどうか確認しつつ読み込むってこと?
AssemblyとかのLoadfileとかをいってるんかな?
それともネイティブのdllの方かな?
LoadLibraly や GetProcAddressの話かな? 今、スレッド毎に初期化と後始末が必要なとあるライブラリを使用しています。
これを生のThreadで使う場合はThreadProcの先頭と終わりでそれぞれ初期化/終了処理を呼べばよいので問題ありません。
ここでThreadPoolを使いたい場合、ThreadPoolで管理されるスレッドの開始と終了時にそれぞれ初期化/終了処理をさせる
ようにしたいのですがそのような方法はないでしょうか。 >>832
チープな感じでいいでしょ
包絡線を微分して形状分析とかよりね >>838
1スレッドで初期化→後始末を2回以上呼ぶのはダメなの? C#+Selenium+ChromeDriverでブラウザ操縦をしています。
サイト上のリンクをクリックするとポップアップで
別な画面が起動します。
そのポップアップで開いたブラウザを操縦する事は可能でしょうか?
もしご存じでしたら解説サイトなどがあれば教えてください。
【やりたい事】
親サイトを起動→親サイト内のリンクをクリック→子画面がポップアップで起動
→子画面のデータを取得→子画面を閉じる→親画面を閉じる >>837
この記事のkernel32.dllが使われてるような使い方のことです
https://www.atmarkit.co.jp/ait/articles/0305/09/news004.html
C#でWindows APIを使う勉強をしたいのですが
このあたり詳しく解説している本がほしいです >>842
アンマネージドの関数呼び出し自体は一度基本を押さえれば
そこまで難しくもなければ奥が深い話でもないと思うので、そこに特化した本は
たぶんないんじゃない?
Win32 API自体の本はいっぱいあると思うけどC#とは関係ないね >>842
最近出たC#ミックスドプログラミングが詳しそう
持ってないから中身については語れないけど pinvoke.net が大体カバーしているけど
間違っている事もあるよ
猫でも か チャールズの本をちゃんと
読むことをお勧め >>840
機能的にはたぶんそれでいけるけど、処理単位(Task)が小さいのでその都度初期化を呼ぶと
オーバーヘッドが大きすぎて、スレッド毎に呼ぶ方法はないかなぁと。 >>841
誰かセレニウム詳しい人教えてください。 >>847
クリックしないでそのUrlに移動してデータ取ったらいいんじゃね? >>849
スクレイピングならそれでいいけど、E2Eテストならだめだね >>850
だめだねってw質問者の情報少なすぎるからこれも解答の一つ >>852
そうかすまん。てか質問者このまま放置か…
行儀悪いな 彼は死んだよ
世界の平和を願って一人で立ち向かった switch(angle)
{
case > 180:
}
みたいに変数の値に対する不等号の条件で分岐させることってSwitchでできませんでしょうか?
おとなしくif文使った方がいいのでしょうか >>855
C#8か9からのswitch expressionなら下記のように書ける
public static string Foo(int angle){
return angle switch {
> 180 => Bar(),
_ => Baz(),
};
} switch expressionじゃなくてもできたわ
C#9のパターンマッチの拡張機能
public static string Foo(int angle){
switch(angle){
case > 180:
return Bar();
default:
return Baz();
};
} VBのSelect Caseは最初から何でもありだ
思えばCのswitchは何を狙った機能だったのかね。
直接機械語のジャンプテーブルに変換できるケースなんかほとんどないと思うのに
そのくせ制約だけ結構ある >>860
> 直接機械語のジャンプテーブルに変換できるケースなんかほとんどないと思うのに
選択肢がenumのケースとかだとほとんど変換できると思うぞ 小田急10人殺傷の犯人は中央大学理工学部出身。
彼をc# プログラマの同僚か部下にしてあげたい。 37にもなって食用油にマッチで火を
点けようとする人はちょっと >>864
スレ違いも甚だしいけどあれは笑ってる奴の方が非常識
衣服を油で湿らせて点火したら普通に延焼する。
その手の事故って時々報道されてると思うんだけど >>864
対馬「馬鹿だな、マッチで火がつくわけねーからチャッカマン用意したわ」 >>865
実際にやってみ
>>863
いやあいつは間違いなく理系じゃないだろ >>864
報道だと灯油ってあったけど
サラダ油の容器に灯油入れてたのかと思った >>869
灯油を準備しようとしたけどできなくてサラダ油って話だろ むしろいい歳こいて本気でサラダ油は延焼しないと思ってる人がいるのが驚き。
灯油は簡単に点火しない(だからポリ容器なんかで携帯できる)が、
「芯」で空気とまざる状態にしてやれば割と簡単に点火して燃焼が継続する。
サラダ油も基本的に同じ。
こぼしたサラダ油をキッチンペーパーで拭いたのを放置したら危険だよw >>871
サラダ油は簡易ランプが作れるほど安全な代物だよ
https://youtu.be/GkN3C0Gk-cM
ユーチューバーじゃなくて東京都謹製の動画 >>871
引火点が全然違う
・灯油: 50℃
・サラダ油: 250℃
サラダ油は単なる可燃性液体類
灯油は第四類 第二石油類な テンプレ読め
>C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください >>873
この人も痛いねw
論点はそんなところにない。
サラダ油で人を火だるまにできるかだろう。
答えは言うまでもない。
その手の事故は時々報道されてるんだから。
どうでもいいけどサラダ油が燃えないと思ってる人は江戸時代まで行燈の燃料に
何を使ってたのか知らないのかw >>876
その事故が起きる程度の温度に短時間でできるかどうか考えた?
250℃まで温度が上げられるならそりゃ火だるまにもできるけど、
それができるなら灯油やガソリンならもっと早く火だるまになるって話
行灯の燃料で生身の人を燃やそうとしたソースあるなら是非教えてくれ >>877
考えた?(笑)
君こそ紙や綿や小麦粉の引火点が何度か考えたのかな?w
まあ理屈は後から考えて欲しいが、とりあえず
キッチンペーパーにサラダ油浸して風呂場で着火して
どうなるか観察してみw ここはC#スレで、人間初心者のスレはここじゃないよ
発達のスレはハンデイキャップ板と同人板にあるのでそっちでやってね >>878
可燃物質なら何でも条件次第で着火するよw
犯人は床に油まいて着火しようとしたんだぞ
それでサラダ油に点火できると思ってるの? >>884
渋谷のスクランブル交差点を爆破しようと
していたんやでw >>876
その手の事故って天ぷらあげてる時の事故か、天ぷらの時は気をつけろよ
サラダ油が燃えないとか、誰もゆってないのに勝手に拡大解釈して作り上げるな Fラン理系は国語のできないやつしかいないから
下手なFラン文系よりも頭悪い 頭が悪いのは簡単な実験で確認できることをやりもしないで
自分の思い込みに固執する人のことだと思うよw
キッチンペーパーとサラダオイルぐらい家にあるだろw
なぜ2分でできることをやろうとしない。
やってみりゃサラダオイルで人を火だるまにする狙いがそう荒唐無稽じゃないことぐらい
すぐ分かるだろうに。(理系出身ならそれぐらいやらなくても分かって欲しいけどw)
で、こういうのに限って「老害ガー」と口癖のように言ってたりする。(このスレにも時々いるねw)
自分自身の思考回路がまさに老害のそれであることの自覚すらないんでやんの。
あと、「問題」が再現可能と思われるコードを示しもせずに動きません動きません連呼してるタイプの人ね。
あれと同じだ。 電車の床に撒いて着火したら認めてやるよ
やれよ早くほれ >>892
老害とか年齢を揶揄する発言が無いのにどうしたの
統失の気があるから心療内科に相談するべきだよ
キッチンペーパーにサラダ油浸して火を付けるのと、
撒いたサラダ油に火を付けるのが同じだと思ってるあたりFラン文系かな 頭がいいやつなら着火に難のあるサラダ油など使わずに
ガソリンやアルコールを使うのが当然
彼が何でサラダ油にこだわるのか誰も理解できないな >>892
> なぜ2分でできることをやろうとしない。
なら君がやってみてYouTubeに上げてくれ フラグを立てるときの変数の型なのですが、2値のときでもboolじゃなくてstring使ってもいいですか?
bool announceRequired=true , false
より
bool announce='on' , 'off'
とした方がアナウンスするかしないかのフラグだよなってわかって、
可読性が高いと思うのですが。 >>899
たまに
string announce='om';
とかなっててもエラーでないぞ
ビルドエラーをうまく使ったほうが幸せになれるぞ なるほどboolだとエラー出ますね
bool使います >>899
一人で組んでるだけなら、何でも自由にすれば良いよ。
他にも定数でSWITCH_ON="on"とか定義するとか。
なんか事情があるならね。 可読性が気になるなら
bool announceRequiredOn と変数名にOnをつけるやり方もある bool announceRequiredOff {
get { return !announceRequiredOn; }
set { announceRequiredOn = !value }
} const string のLengthをconst intに割り当てる事できないのかよ >>910
継承させるならclassのpropertyでやっちゃえば >>910
前に「自然数を継承して整数にする、という発想は根本的に間違っている」
って説明したと思うんだけどw
Weekdayを継承してDayOfWeekを作るっておかしいでしょw
DayOfWeekのサブセットとしてWeekdayを定義ならありかもしれんが >>913
ステータスに使うのは間違ってるって言うんだろ?
単に自動でID作ってくれて異なる値でビルドエラーが出ればなんでもいいんだけどね 本当にすごいしょうもない揚げ足取りだしかつスレ違いで恐縮なんだけど、
今時はあんまり「ステータス」って言葉は使わないと思うよ
理由はよく知らないし、たぶんその方が英語的に自然だからだと思うが、
英語でも日本語でもステートの方を使うことの方が多い。
これ偏見かもしれんけど、今還暦間近ぐらいの世代より上の人はよくステータスって言ってた気がする。
特に組み込み系とかの >>916
ステートとステータスは別物だから今時とかそういう話じゃない
組み込みは時間に関わる状態が多いから自然とステータスが増える
時間に関係がなく、物体の状態であればステート
だからオブジェクトに対してはステートが増える よく考えるとオブジェクト指向言語のくせにオブジェクトの状態を扱う型なり仕組みなりがない欠陥言語なんだな しっくりこないんです
ステータスおじさん誕生の瞬間であった ちなみに、状態遷移図は英語でstate transition diagramというらしい。
ステートマシンはもちろんstate machineだ >>921
御託はいいからオブジェクトの状態を何使って組めば満足なのか言えよ visual studio 2019でnet core 5.0でプロジェクトを作りたいのですが
Windows フォームアプリケーション(.NET Framework)と
Windows フォームアプリケーションどっちを選べば良いのでしょうか? このへんも事情知ってる人はわかるが、新規の人にとってはカオスだわな。
Core と Coreなしと Framework
Core と CoreなしはCore の系列なのかとか。
.net から .net frameworkは参照できるのかどうかとか。 あと油断すると.NETはあってても言語がVBになってたりして、新規プロジェクトを作るのなんかめんどい。 後者のWindows フォームアプリケーションで作りました。
作成途中でnet core のバージョン選択する画面が出たのでこれで合ってるのか分かりませんがとりあえず進められました 今のC#ってVisualStudio不要でVSCode一本で行けたりするの?
.NET Core以上ならVSCodeでビルドまでできるって聞いた記憶あるんだけど WebアプリとコンソールアプリはVSCodeで困ったことはない なるほど
GUIデザイナが不要ならVSCodeで問題ないってことか コード生成、アナライザー、各種リソース作成はVSのが強い >>923
.netのWinFormsはデザイナに未実装の機能があるよ
データソースの設定とか Xamlだったら理屈で組めるからデザイナー抜きでも出来そうな気がする。
かといって、プロジェクトとかどうやって作るのか、調べるの面倒だし。 XAML書くにはインテリセンスないとやってられないけど
前に調べた限りまともなインテリセンス出してくれる拡張はなかった VSのインストーラーでC#とVB.NETってなんでセットになってるんだろ
C#だけをインストールできない >>939
コンパイル以降の処理は似たようなもんだからリンカとかは共通なんじゃね? 覚えてないけど、普通にC#だけとか選択できなかったっけ?
選択できた気がするけど。 インストーラーで個別のコンポーネントを選んでも
「C#およびVisual Basic」「C#およびVisual Basic Roslyn コンパイラ」
とセットになってて分離出来ない >>942
へーそうだったっけ。
数十MBのストレージ節約にカリカリする時代じゃないって判断かね そもそもVisual studioをインストールする前からC#/VB.NETのコンパイラが入ってる時点で何をか言わんやだろうに… そこまでインストールを削るほどシビアな開発環境じゃ辛かろう。 別に容量削るのが理由ではないぞ。
いらんものはいらんというだけ。
更新にも時間余計にかかるし、 VB「C#さんと一緒じゃないと皆インストールしてくれないじゃん」 >>949
だから
だってVBしか入ってないもん
って言い訳を潰した
次はVBサポート打ち切りの流れ >>949
だったらOfficeのマクロもC#使えるようにして欲しいな。 超複雑な型になるCOMと相性悪いからTypeScriptのメリットないのでは...
c#の方がまだCOMと型の自動マーシャル効いてるから相性いいでしょ。 VB(.NETの方)のOption Strict Off相当の機能を導入しないと
C#をマクロに使うのきついだろうね。
エクセルしか知らんけど、
double[,] hoge = range.Value;
みたいに書けないからね。
エクセルは機能の性格上型安全性とは相性が悪い。 VBなんかなれてないからc#でdll作ってやってるわ dynamic hoge = range.Value; でよくね? >>953
TypeScriptの型は後付けだからどうとでもなるんだよ
特定のプロパティの値に応じて型を変えるとか自由自在
オブジェクトの実体と必ず一致しなければならないC#の型とは違って、
TypeScriptの型というのはオブジェクトの実体とは無関係でTypeScriptでそれを扱うときの外形的な制約を記述したものにすぎないの マーシャリングについて補足しとくと
例えばある変数xにRangeオブジェクトが入っていることを知っているとして、C#の型で扱おうとすればラッパー型で包んでやる必要がある
これってよく考えると無駄で、xがRange型であることは本来コンパイラとVSの静的アナライザだけが知っていればよくて、実行時に実際にラップ(マーシャリング)する必要は本来ない
つまり
dynamic<Range> x; //xはRange型のメンバを持つことが保証される
みたいなことができればよくて、これこそがTypeScriptの型なんだよ TypeScriptは保証なんかしてないがな、
JS変換時にチェック走るだけや。 実際は中の実装変わってしまってるのに、
実装と無関係な定義ファイル使う可能性高いTypeScriptではエラー起きててもなんでエラーなのか気づくの遅くなる。 >>958
COMの場合は実際にQueryInterfaceしないとその型として使えないでしょ。
そこではTypeScriptの静的な型推論は用がない。
加えて、C#などではタイプライブラリからその定義情報を取得できるけど今のTypeScriptにはその機能はない。
まあOfficeに組み込むならその時に追加すればいいんだろうけど。 >>961
そんなもん後付けでTypeScript用の型定義を書けばいいだけだよ
COMのIDLかメタデータから自動生成するんだろう だからその機能を追加する必要があると書いたわけだが。
そのうえで、タイプライブラリの型情報を使う前提ではTypeScriptの型推論が特に役立つわけではないということ。 5年以上前から.netもcomも使えるclearscriptとかマイクロソフト出してるが、
TypeScriptとes経由でCOM使ってるユーザ数は
極小に感じるけどね。 >>963
機能追加って何のことを言ってるんだ
普通にMSの社員が型定義書きゃいいだけだよ COMのまま扱いなんてことはJSからはないよ。
ut8ベースだからラップしないとムリ。
ラップしてしまうならどっちでも変わらん。 そもそもTypeScriptが使えるのってWeb版のOfficeだけだからCOMなんか無い
仮にTypeScriptでCOM経由でデスクトップ版の操作させるとしたら、dynamicと同じく普通にAutomation使えばいいだけだね
もちろん型定義も普通に書けばいいだけ なんてこったい
net5でChartが使えないぢゃないか githubでソース公開されてるから自分でビルドはできるよ多分 さんくそだと礼を言ってるか罵倒してるか分かんないね
両方って可能性もあるか テキストファイルを開いて比較しまくるアプリを作ってつかってたら
Windows Defenderが重大な脅威と判断してアプリを消された
なんで脅威扱いになるんだか chartの正式な対応っていつなのかな
chart好きだからずっと待ってるんだけどな 複数のダイアログで定義して、メソッド中でHttpClientで外部のAPIにアクセスするクラスがあります。
複数のメソッドがあるのですが、それぞれのメソッドの中でHttpClientをnewするのは
ダメだと言うのを今さら知り、修正をもくろんでいます。
そうなると、各ダイアログで宣言するのも良くないとか、ついでに外部に接続せずに
テスト出来るようにしたいとか、直したいところが増えてしまい、どこから手を出せば良いか
分からなくなってしまいました(全面的に直さなければいけないことは分かる)。
この手のクラスについて、わかりやすいサンプルコードがありましたら教えてください。 あー、でも、扱いが厄介であるとわかってるクラスなら自分が使いやすいようにラップしちゃえば?
そうすれば後で
実はこのクラスこうやって使うんですよ(・∀・)ニヤニヤ
ってなったときにそこさえ直せば良くて
他のクラスにはそのクソな部分が伝播しないじゃん >>975
ダイアログ開くときくらいなら毎回newで全く問題ないよ
使い回したほうがいいのは、ループ内で毎回newするとか、多数のユーザーが同時に利用するWebシステムでリクエスト毎にnewするとかのレベルの話 WinFormsのDataGridViewColumnのAutoSizeMode.Fillって一番隅じゃないと機能しないの?
ColumnHeader, Fill, ColumnHeaderって並べると一番右がColumnHeader無視されて押しつぶされるんだけど >>979
右端の表示カラムにしか使ったことが無い >>979
今やってみたけど、普通に真ん中のカラムもFillされたよ。
https://ideone.com/nC8AFr
※Formに1個だけDataGridViewを置いて、デザイナではプロパティ一切編集していない状態。 >>980>>981
ありがとう
ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize
こうしてたのが不味かったらしくAutoSize以外にしたらちゃんと右端のもColumnHeader機能するようになった Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています
Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます
Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ
なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?
Nimの実験的特徴
著者: アンドレアス・ルンプ
バージョン: 1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html
Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる
「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています
Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます
Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ
なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?
Nimの実験的特徴 バージョン1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html
第二プログラミング言語として Rust はオススメしません Nim をやるのです
https://wolfbash.hateblo.jp/entry/2017/07/30/193412
Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる
「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます aws lambdaにdeployしたfunctionのステップ実行ってできる? 変数って全てカプセル化して関数でアクセスするようにしないと駄目ですか?
変数がたくさんあるとき
private float hoge;
private float fuga;
void GetFuga
void BetHoge;
って関数たくさん用意するのも見ずらいと感じるのですが >>986
気にしなくて良いよ。ダメってことはない。
理由が出来てからカプセル化すれば良いんじゃないかな。 publicにしたいのは自動実装プロパティ使おう フィールドと大差なく書ける
public float Hoge { get; set; } 他の人使わないなら、プロパティーもフィールドも変わらん。
他の人使ってないなら別にdllでアセンブリ状態で参照させてないってことだから、
必要な段階でフィールドからプロパティーに変えればいい。
呼び出し側の書き換えも要らんし。 結局なんでそうするかって言ったら想定外の値が入ることを避けるためと修正が必要になったときに修正範囲を小さくするためだからなあ プロパティで実装しておくとVS上で何か所から参照されているのか表示されて
その参照場所へ簡単に飛べるようになるから個人開発でもお勧め 個人で開発するなら入力チェックしなくて良いと思う。
見せかけだけのプロパティとか、そういう場合が多いかな。 機械的にプロパティやアクセサメソッドを実装するのはやめたほうがいいよ
面倒だと感じる時点で設計を疑ったほうがいい
DBのエンティティクラスみたいなのを除けば、本当にクラス外に公開する必要のある変数って極僅かなはず >>994
そんなことねーだろハゲ
処理1-24までの出力が全部必要な
処理25とか普通にあるだろ
その時処理1-24の閉じられたクラスのプロパティが全部必要になるとか普通によく見るわ
お前はないの?
経験値が足りないんじゃない? >>995
リファクタすりゃいいんじゃない?
まあSIみたいだから後で弄るのは難しいのかもしれないけど privateなフィールドとプロパティどちらにするか迷ったけど、
プロパティにしとけばgetとset別々に検索できるから便利だと気づいた。 無意味なsetが後々悪さをすることがある
>>990
の言う通り他の人が使うか使わないかで左右されるが、3ヶ月後の自分はほぼ他人だったりする このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 101日 9時間 7分 32秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。