ふらっと C#,C♯,C#(初心者用) Part156
レス数が1000を超えています。これ以上書き込みはできません。
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part155
https://mevius.5ch.net/test/read.cgi/tech/1655422932/
■関連スレ
C#, C♯, C#相談室 Part96
https://mevius.5ch.net/test/read.cgi/tech/1639965805/
■コードを貼る場合は↓を使いましょう。
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/
https://source.dot.net/
・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
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!
ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!
ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!
ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!
ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ!ちんぽ! いちおつ
大体あってるけど冒頭のおまじないが消えてるね…
!extend:checked:vvvvv:1000:512 スレ立てるときは1~2行ぐらい追加して立てた方が良いかなって話だよね つまり次立てる人が気をつけてくれればいいってことか… 書いてる通り1行ぶんは消えるからね 毎回増やさないといけない
立て直しはしなくていい、大丈夫
次スレ立てるときに気を付けないといけないなーと >>5
立てる時に消費されるから増やさなきゃいけないんだよ
5chは仕様の古さが目立つな
今時シフトJISだったり1000レスまでだったりメアド欄があったりそこにsageを書いたり «許可»をクリックして、ロボットではないことを確認してください! ::::::::::::::::::::::::...... ........::::::::::::::::::::::::::: ;;;;;;;:::::::::::::::
γ ⌒ ⌒ `ヘ
イ "" ⌒ ヾ ヾ
/ ( ⌒ ヽ )ヽ
( 、 , ヾ )
................... .......ゞ (. . ノ. .ノ .ノ........... ........
:::::::::::::::::::::::::::::::::ゝ、、ゝ.....| |..., , ノソ::::::::::::::.......::::
_ _i=n_ ._ [l_ .._....,,. .-ー;''! i;;;~-ヽ_ii_i=n_ [l h__
/==H=ロロ-.γ ,~ー'''l ! |'''ーヾ ヾ 「!=FH=ロロ
¶:::-幵-冂::( ( |l | ) )=HロΠ=_Π
Π=_Π「Ⅱヾ、 ⌒~"""''''''⌒~'"´ ノ;;'':::日lTΠl:::....
Д日lTl,,..:''''" ""'''ー-┬ーr--~''"" :::Д日lT::::
FH=n.:::::' | | :::FL日l」:::::
ロΠ=:::::.:. ノ 从 ゝ .::田:/==Д::
口=Π田:::. .::::Γ| ‡∩:::
Γ| ‡∩Π::.... ...:::Eヨ::日lTlロ::::
Д日lTlロ_Π::::....... ...::::::::田:凵Π_=H::
=Hロ凵Π=_Πロ=HロΠ:::.................:::::::::::口ロロH「l.F 質問です!
Windowsでwavとかmp3とかじゃなく配列で作った正弦波を鳴らすための標準ライブラリってありますか?
シンセサイザーアプリのために低レイテンシーだとありがたいです そもそもwavファイル自体が波形データそのままに近いのでは?
Win32APIを直接叩くとやりたいことは出来るとは思うけどね
waveOutOpen()とかこの辺
大昔にやった事あるけどその時はVCだったし全然覚えてないわw >>23
waveファイルはヘッダー情報があるのでそれ作らないといけないのがめんどくさい
わざわざファイルを作らないといけないのもスマートじゃないし
やっぱりWin32API使わないとなのか…
このへん破ったことないからわからん >>24
この辺使ったことないの間違いです
どんな誤変換したんだ… この質問者、前スレで就職相談してた27歳の人じゃね?
なんとなく「mauiで」とか条件後出しされそうな悪寒 dllをプロジェクトの参照に入れずに、実行時に動的に読み出して内部のメソッド実行やインスタンスの生成をしたいのですが可能でしょうか? そりゃ元々 Dynamic = 動的 だからできないわけない
てか C# dll 動的ロード とかでググろうと思わないのか?
https://qiita.com/rita0222/items/609583c31cb7f0132086 21ですが色々調べた結果標準ライブラリでは難しいようですね、、、
win32APIをDLLインポートするのも大変そうなので(Xaudio2をC#で使う記事を見ましたが理解ができませんでした)
素直に拡張ライブラリのNAudioを使うようにします。 dll実装が先に存在してるなら、参照で先に作っておいて、
実行時にこけたらAssembly.LoadFileとかするのが普通かな。
dll実装が不定ならAssembly.LoadFileで読んで、dynamicで動かすことになるが
結構不安要素でかい。
Reflection使ってメソッドの実装のありようの確からしさは実行中に確認する必要がある。
interfaceなりでちゃんとdll側を縛ってあるのがいちばんいいけどね。 プラグインシステムならまだしも、dllの動的ロードでMEFなんか使わんが... そういうのをプラグインと言うんだぞw
プラグインじゃなきゃ普通に参照すればいい あ、そうか、もしかして参照したdllはアプリ起動と同時に読み込まれると思ってるやついるのか
だから参照しないようにしてんの?w 開発時は参照では組むが、実際の実行環境では
実行の基点となるexeとは別の場所にdllが配置されてるとかもあるからなぁ。
まあ質問者が何やりたいかは明確にしていないからなんとも。
dllを遅延ロードしたいだけなら、上にあるように
普通に参照で組んで、実行時にdll無いと必要になるステップに
到達したらエラーになるから、それに備えて
AssemblyResolverに無かったらこの場所のこのdll読めと指示しとけばいいだけ。
これも上に書いた通り。 MAUI君とマウントじじいはID変わってもすぐ分かるな >>39
さすがに必須dllを別管理するのは筋が悪い
dll hellを招くアンチパターンだぞ
20年前にはみんなやめてるからそろそろ知識をアップデートしよう プラグインスタイルにする場合は開発スタート時点から外部に公開する用のinterfaceを
別プロジェクトにする必要があるからお勧めしない
アプリプロジェクト
公開用コモンプロジェクト
プラグインプロジェクト
こういうのを含んだ感じになる
c++はこういうのが柔軟でやりやすい
C#はあまりプラグイン開発に向いていない んなことはない
C#であまりプラグイン的な機構が使用されないのは、C++に比べて広く一般的に使用されるアプリケーションが少ないのと、
ビルドが簡単高速なために全部リビルドしたほうが早いからだよ あら捜しの結果、たかだか一つ数分で作れるプロジェクト分割することを欠点と言い始めたかー 全くclassなどを受け渡ししない場合を除いて通常は
アプリプロジェクト
公開用コモンプロジェクト
というソリューションで開発してプラグインは
公開用コモンプロジェクト
プラグイン個別プロジェクト
で開発
公開用コモンプロジェクトが分厚くならないようにinterface中心にする 粗さがし?
普通に作ると分かることだが…
c,c++はゴミみたいな存在だがプラグイン作る時は.hやhpp配るだけでやりやすいことが多い 重量級アプリ作っててプラグインの仕組みを導入したくなった場合
かなり面倒
dynamicにするのは無し classの受け渡しなんて言ってる時点でもう... じゃあ現実的なラインで話せよ
俺が書いた以外で実践的なプラグインを合理的に作る方法をさ
レベル低いのにしゃしゃって来るんじゃない >>51
話が見えてないんだな
お前がここで一番の馬鹿だ
これは間違いない
対案も出せない
しかもお前はジジイだな
筋が悪いと言うワードセンス
20年前のDLLの話をしてるし >>42
必須じゃないdllでやるんだろ。
ハードウェアなどの環境に依存するdllとかな。 >>53
そういうのは参照できないから(あるいは不要なものまで全部参照する必要があるから)インターフェースがいる
プラグインがベストプラクティス プラグインはプラグインのインターフェースに合わせて実装するんであって
既にあるdllを単に動的バインディングするのとは別物だな。 powershell上でC#の連携で、再帰するような処理や重い所をC#で書いて使ってるんですが、
powershellの機能が必要な時はC#側からpowershellのスクリプトブロックをFunc<>やAction<>でコールッバックとして呼び出す形にしています。
このときに、Func<>やAction<>の引数にrefを指定して、bool値とかをpowershell側から設定して返してもらうようしたかったのですが、
Func<>やAction<>の引数にrefは指定できないようでした。
代替として、PSObjectにNotePropertyを作って値を入れて貰ってまますが、他に良い手段があったら教えてください。 >>56
自分でデリゲート型を作ればいんじゃね
知らんけど >>58
Func<>やAction<>がだめってことはデリゲートの引数指定でrefがだめってことかと思い込んでましたが違うんですかね。
試してみます。ありがとうございました。 >>60
できるぞ
https://ufcpp.net/blog/2022/2/ref-generic-arguments/
Funcとかは自動生成とは言え引数の数だけ実際に宣言してる
ここにrefやoutを入れるとその組み合わせは膨大な数になるから(例えば引数2つだけでもFunc<T1,T2>, Func<ref T1,T2>, Func<ref T1,ref T2>, Func<T1,ref T2>,Func<out T1,T2>, Func<T1,out T2>, Func<out T1,out T2>, Func<ref T1,out T2>, Func<out T1,ref T2>)もっといい方法が無いか探してるところだろうな できました。
>>61そういう泥臭い実装だったのか・・・ありがとうございます。
最初からdelegateで書けばよかった。 どうやらstructを含む値型を参照渡ししても呼び出され側のpowershellでは書き換えられないらしい。
下記のPSParamのclassをstructに変更するとpowershell側ではうまく書き換わってるように見えても、呼び出し側のC#に戻るとbState1はTrueのままとなる。
バグなのかなあ。
Add-Type @"
using System;
public class Helper {
public class PSParam {
public bool bState1;
public bool bState2;
};
public delegate void refAction1(ref PSParam p);
public static void CallbackTest(refAction1 proc) {
var p = new PSParam();
p.bState1 = true;
p.bState2 = true;
Console.WriteLine("bState1:{0}", p.bState1);
proc(ref p);
Console.WriteLine("bState1:{0}", p.bState1);
}
}
"@
[Helper]::CallbackTest2({param([ref]$p); $p.Value.bState1 | Out-Host; $p.Value.bState1 = $false; $p.Value.bState1 |Out-Host; }) 上のCallbackTest2はCallbackTestの間違いです バグって言うかスクリプトブロックを渡してるからだろうな ていうか参照渡しじゃなくHashSetを使ってやりとりするんじゃいかんの? structにこだわる意味はなさそうだしそれならrefも必要ないし
そもそもFuncの返値にすればいいんじゃないの的な Hashtableを使う場合
Add-Type @"
using System;
using System.Collections;
public class Helper {
public static void CallbackTest(Action<Hashtable> proc) {
var p = new Hashtable();
p["bState1"] = true;
p["bState2"] = true;
Console.WriteLine($"bState1:{p["bState1"]}, bState2:{p["bState2"]}");
proc(p);
Console.WriteLine($"bState1:{p["bState1"]}, bState2:{p["bState2"]}");
}
}
"@
[Helper]::CallbackTest({param($p);$p.bState1 | Out-Host;
$p.bState1 = $false;
$p.bState1 | Out-Host }) >>63
普通に
bState1: True
True
False
bState1: False
ってなるけど?
$PSVersionTable.PSVersion: 5.1.19041.1682 >>59
Prismは大袈裟すぎるがMVVMを使うなら何か一つフレームワークは必須
CommunityToolkit.Mvvmいいぞ
必要な機能は揃ってるのにシンプルで学習コストが低く軽い
これで慣れてからPrismに移ってもいいし仕事じゃなきゃ移らなくても何も問題ない >>70
class PSParamをstruct PSParamに変えても? >>69
わざわざC#でやるからには少しでもパフォーマンスを上げたいので、
C#側でハッシュとかPSObjectで文字列のプロパティを作って渡すとかは極力避けたいのです。
>>70 >>72の仰る通りclassで渡してるので正常に動くやつです。structに変えて試してください。 ちなみにテスト結果は
値の参照渡し× >>63-64
参照の値渡し○
参照の参照渡し○
でしたので、コンテナを渡す限りではrefは必要ないですね。 >>74
そんなんでパフォーマンス上がらんぞ
PowerShell使ってる時点で無意味だし計測しても誤差が大きすぎて差は出ない
スクリプトブロックをデリゲートに入れるための代理関数とか中で作られてるからな >>76
計測してみました。
以下のclassでパラメーター渡すのよりもHashtableのが2割程速い結果になりました・・・これはHashtable採用ですね。
Add-Type @"
using System;
using System.Collections;
public class Helper {
public class PSParam {
public bool bState1;
public bool bState2;
};
public static void CallbackTest1(Action<PSParam> proc) {
var p = new PSParam();
p.bState1 = true;
p.bState2 = true;
proc(p);
}
public static void CallbackTest2(Action<Hashtable> proc) {
var p = new Hashtable();
p["bState1"] = true;
p["bState2"] = true;
proc(p);
}
}
"@
(Measure-Command { 1..10000 | %{ [Helper]::CallbackTest1({param($p);$p.bState1 = $false; }) } }).TotalMilliseconds
(Measure-Command { 1..10000 | %{ [Helper]::CallbackTest2({param($p);$p.bState1 = $false; }) } }).TotalMilliseconds >>72
ああ、すまんちゃんと読んでなかったわ
まあ、仕様だろうね
変更可能な値型は避けろって書いてある
❌ 変更可能な値型を定義しないでください。
(... 中略 ...)
また、一部の言語 (特に動的言語) では、ローカル変数であっても逆参照されるときにコピーが作成されるため、変更可能な値型の使用で問題が発生します。
https://learn.microsoft.com/ja-jp/dotnet/standard/design-guidelines/struct
普通にクラスで作ればいいだけ、てかPowerShell使ってる時点でclass/structで細かいパフォーマンスチューニングしても無駄だと思うぞ VS2019で.NET 4.5 + NugetでValueTuple入れて作ったプロジェクトを
VS2012で読もうとしたらValueTuple扱えなかった・・
VS2012も.NET 4.5は大丈夫だけど、ValueTupleだとC#のバージョンが問題になるのかな? VS2012じゃC#コンパイラが全然タプルに対応できないからね
普通の構造体として扱うことはできるかもしれないが 読んでビルドするだけならVSCode使うほうがよさそうかな 学習オプションをGUIでも確認しやすいという意味でも
VSの方がはるかに向いてるが。
VSCodeが候補にあがるのはAzure使っててC#だけでなく
色々混じってる時くらいでしょ。 QtやTcl/Tkとか名前は聞くけど誰も使っている人居ないんだよね
WinFormsより簡単なの出さないと日本では流行る気がしないw >>86
かつてのDelphiやVB6の役割が今のWinforms
これ以上簡単なモノは出ないだろ オブジェクト指向で
クラス=ニュークラス
変数A=クラス.メソッド(引数)
で他のクラスでメソッドで作った変数Bを変数Aに代入したいとき
returnで返すのが一般的なんかな?
俺他のクラスでプロパティ作ってメソッド内で作った変数Bをプロパティに入れて
クラス=ニュークラス
クラス.メソッド(引数)
変数A=クラス.プロパティ
にしてるんだけど異端か?
なんか遅くなるとかの弊害ある? >>88
#nullable enableにすると、そのプロパティーを hoge? にしないとワーニングが出てくるね そのclassの設計次第だとは思うけど…
単純な計算結果を必要としているのならstatic methodにして直接メソッドの結果を取得する方が分かりやすいだろうし
インスタンスの何かがその処理に必要であるのならプロパティ経由で取得する方が良いだろうし メソッドの仕様とプロパティの仕様の二つを読まなきゃならなくなるから一般的に可読性と保守性は落ちる
あと副作用前提なので参照透過でなく多用するとスパゲッティになりやすくなる
メソッドがthisを返すならMauiAppBuilderみたいにメソッドチェーンで使えるようになるしプロパティパターンでパターンマッチングできるから場合によっては便利になる ブラウザの「名前をつけてページを保存」をWebview2でやりたいのですが、無理ですかね?
stream で読み込むくらいしか方法はないですか? >>94
それはブラウザの役目であってHTMLをレンダリングして表示するWebViewの役目じゃない
スマホのブラウザにはそんな機能ないだろ >>95
そうですよね
WebBrowserにはWebBrowser.ShowSaveAsDialog メソッドがあったのですが・・・ Chromeとかのダイアログも結局はWindowsならshell32のSHBrowseForFolder利用したりとOSの機能使ってるだけなんじゃないの? >>315
予想で来ていたなら大儲けしたんだろ
ついでにそのスクショもうぷ 誤爆w
webvew2コントロール上で右クリックすると「名前を付けて保存」が出るようなので
そこを自動でやるだけなですがいい方法ないですかね? そのページのHTMLをHTML方式で保存すればいいだけなのでは? WebView2ならJavaScriptを呼び出せるメソッドがあるからhtmlタグの中身をゲットしてそれを保存すればいいだけのような気がするがどうなんだろ? HTMLだけだとcssやjsが含まれていないので
落としたHTMLを表示するとまともに表示されない問題が発生してしまいます
ブラウザの「名前を付けて保存」は完璧に保存されますのでそちらが使いたいです 以下WebView2のエキスパートでもなんでもないから見当違いかもしれないので話半分で
ちょっとぐぐってみたけどWebView2で「名前を付けて保存」相当をやってる情報は出てこないね
Webブラウザでもページの保存は割と面倒な処理に該当するはずだからseleniumとかでWebブラウザに丸投げする方法を考えた方がいいと思うよ ソリューションエクスプローラーに配置したJsonファイルをデシリアライズしてObservableCollectionに入れたいのですがどうすれば良いでしょうか?
using var stream = await FileSystem.OpenAppPackageFileAsync("monkeydata.json");
using var reader = new StreamReader(stream);
var contents = await reader.ReadToEndAsync();
monkeyList = JsonSerializer.Deserialize<List<Monkey>>(contents);
↑これを参考にやってみたのですがファイルが見つからないとか言われてしまいます 一行目でエラーなら単純にファイルが無いのでは?
VSでデバッグの時のカレントがどこなのかそういう知識が無くパス指定も無く開けなかったら
カレントに無いぐらいは分かりそうなものなのに・・・ VSに入れたファイルのパスの指定方法ってどうすればいいんですかね?
ファイル名だけで勝手にソリューション内のファイル検索して取り込めるのか相対パスなのか完全パスなのか…
相対パスならどこからの相対パスを書けばいいのか… ビルドアクションは埋め込みリソースに設定すればいいんですか?
何に設定すればいいんですか? >>112
ありがとうございます!
MauiAssetにしてResourcesからの相対パスにしたらいけました! ListやObservableCollectionとか作るときに別classでget,setでプロパティ作るけどこれってなんて言うものなの?
他の言語とかも一緒? よくわからんがViewModelの話をしてるのか? >>115
どっちかというとModelの話かな
ほとんどの人がModelフォルダにpublic〇〇get,setしてる List‹〇〇›とかObservableCollection‹〇〇›とかの〇〇部分
xamlだと{Binding 〇〇}で〇〇の中に定義したプロパティを読み込めるやつ doubleにTryParseした値を別な変数に入れたいけど、もっと素直な書き方ないかな?
var value = double.TryParse(str, out dbl) ? dbl : dbl; >>117
型引数なのか要素なのかモデルなのか何のことを言ってるのかわからん 選択肢がめっちゃ多い中で1つ選ばせるコントロールって何が良いですかね?
80項目くらいあるのでコンボボックスはNGになりまして。
選択内容は 数値:文字列 で表示したいです。 >>121
何で決定するの?それ
何か見て決めるんでしょ?
それを画面に出せよ 立ち食いそば屋の券売機みたいにボタン並べればいいじゃん >>119
我ながら意味不明だけど、TryParseした"dbl"を"value"に1行で代入する方法をこれしか思いつかなかった
どうやればTryParseの結果を式として返せるの? double.TryParse(str, out var value) >>126
ついでだが選択肢が80もあるなら検索ボックスも欲しいな
欲しいというか必須
別画面にせずともコンボボックスで検索するという手もある >>124
絶対に失敗しないなら単に double.Parse(str) でいいし、失敗する可能性あるなら失敗した時にどうしたいのかによるわな >>121
高さある程度とったリストボックスでいいんじゃない
フォントダイアログのフォントみたいな
頭に数字付けるのはインクリメンタルサーチとの兼ね合いがあるが項目が日本語なら関係ないか >>121
Google翻訳の言語選択画面とか
StackOverflowやEvernoteのタグ選択画面とか
有名どころで類似画面を見つけてそれを参考にするといい
選択肢の数だけじゃなく選択させたいデータの特徴とユースケースによって適切なUIは変わってくる IsVisibleプロパティでリストビューを最初に消しててボタン押すとリストビューのIsVisibleがtrueになる
そのリストビューを選択させてSlectedイベントハンドラーでボタンのテキストを選択したものにするみたいな Slectedイベントでもう一度ListViewのIsVisibleをfalseにするとスムーズかも
WPFの場合はVisibility=collapsedにすれば画面専有しなくなる
このプロパティめっちゃ便利だからみんなも使って >>135
リストビューだからイメージとかも表示できる
datatemplate設定する必要あるけどね
リストビューだけじゃなくてcollectionViewとか使ったら横2行でスクロールできるようになるし 検索バーもリストに紐付けられてたような気がするから更に便利かも
検索バーもリストビューとかと同様にIsVisibleが連動するようにしておく >>136
選択するのは数値と文字列って書いてるが まぁめんどくさかったらコンボボックスでもいいけどね
1つしか項目ないならこっちのほうが楽だと思う >>138
UIとかこだわるならListViewかなぁ >>125 >>130
iniファイルからの読み込みなので失敗もありえて、その場合は0.0が期待値ですね
TryPaerse失敗でoutの方は0.0になるので、単純にoutの値が欲しいだけなんです
ラムダでもうまく書けないので、>>128の言うようにメソッドにするしかないですかね >>141
double.TryParse(str,out double value) ? value : 0 値が本当に0.0だったときに腹を切る用意はできてんだろうな? 失敗したときは初期値を代入する、って意図なら default にした方が分かりやすいぞ どうしても代入式じゃなきゃヤダってんじゃない限り>>127で十分なんだけど c#でコードをすっきり書く方法について
unityです
以下のようなメインルーチンと自作関数がありますが、自作関数が多くなると間延びして見づらくなります
こうズラズラと書いていっていいものでしょうか?
void update()
{
//この中に記載したものが1フレームごとに実行される
}
void zisaku_kansu1()
{}
void zisaku_kansu2()
{}
void zisaku_kansu3()
{} 知らんけどどのオブジェクトにメソッドを生やすかは見やすさ関係なしに選んだ方がいい
メソッドが増えすぎる場合クラスが肥大化しすぎて単一責任原則に反している可能性があるから他のクラスに分割できないかどうかを検討してみろ スクリプト1つにここまで、みたいな目安はあるんでしょうか? 無いよ
数じゃない
せっかく単一責任原則ってキーワード出てるんだから調べてみたら? bool? x; をint の 0,1,2 にしたいのですが
return (x is null) ? 0 : x ?? false ? 2 : 1;
もっとかっこよく出来ませんか? ほとんど変わらんけど
x.HasValue ? x.Value ? 2 : 1 : 0; 見やすさを優先したいなら複数行で
return x swicth
{
true => 2,
false => 1,
_ => 0,
};
と書きたいなあ
1行で
return x swicth { true => 2, false => 1, _ => 0 };
と書いてもたぶん大丈夫だとは思うけど ネタコードだけど
new bool?[]{null,false,true}.IndexOf(x) >>155
かっこつけてないじゃん
x.HasValue ? (x.Value ? 2 : 1) : 0; >>158
かっこが無くてもちゃんと動くよ
あった方が分かりやすくて良いけど その変態コードやるならメソッドにして手厚くコメント入れて欲しい
明示的にif文でデカデカと対応がわかるように並べて欲しい
一石二鳥なんか狙う場面じゃない そのイカれたクソ設計考えたやつの名前と設計書の項目番号も添えて
わかるように並べるべき switch式って.NET Frameworkだと(というかC# 7.3までだと)使えないんだね
.NET FrameworkでC# 8.0以上に上げるのは推奨されないって見てビビった 推奨されないというか、C#8.0以上では.NET Frameworkは公式にサポート外となった
仮にたまたま今動いてても明日.NET Frameworkのセキュリティパッチで突然動かなくなるかもしれないし、もちろんMSは修正しないよ まあ今出てる中ならどれでもいいわ
少し見にくいとしても読めないレベルじゃないから Nullable有効にできないバージョンは古いC#って感じでもう使いたくないな >>170
よし。俺が解説してやろう
かっこいいコードがほしい
かっこがない→かっこつけた→格好つけた→格好いい
>>167 可哀想w >>171
せめてカッコつけてないじゃん
って書いてほしいわ... オブジェクト内でバイナリファイルの内容を扱うとしたら、バイト型配列がよいでしょうか。ファイルストリームで吸い出してオブジェクト内で扱うつもりです。
テキストファイルでは、ストリング型か、ストリング型配列か、それともバイト型配列がよいでしょうか。処理のしやすさを考えるとストリング型に一気に吸い出すのが良いかなと思います。 データをバイト配列で扱うのが都合が良ければバイト配列にするしそうでなければ型を作る C#の正規表現が難しい・・・
文字列が特定パターンに一致したら、その一部をキャプチャして後方参照したいんだけど、やり方がわからん
具体的には下の感じで最初の数値群と2番目の数値群を取り出したい
Perlだとこのパターンマッチング後に$1と$2で取り出せるけど
if (Regex.IsMatch(str, @"^FIRST(\d+)_SECOND(\d+)$")) IsMatchは結果を捨ててるぞ
Matchを使え >>177
ストリング型に一気に吸い出すのが処理しやすいんだったらそうしたらいい
ストリームは全部一気に読むときの遅延が無視できなかったりメモリに全部乗らないような巨大なファイルを扱うようなときに使うもので、
全部一気読みで問題なく動くのならその方がシンプルで好ましい
バイト配列か文字列かは扱い対象のファイルがバイナリなのかテキストなのかに合わせればよいだけ 自分でも複雑なことをやるってわかってるのに一気に処理して
ログも出さない
途中の計算課程もみずにできると思い込む
やり方がわからない以前に一度でも実行したのか? c#でthisはつけたほうがいいのですか?
現在のインスタンスを参照していることが、そのほうがわかりやすいかなという認識ですが、機能上、すごく重要なものだったりすりんでしょうか visual studio使ってるなら色を見たらいい
色が薄いのは削除推奨
右クリックしたらリファクタリングメニューが出る
濃い色ならそのまま書いとけ this 必須のケースって引数と名前被ってる場合以外にあるっけ? this.でわずかに候補が絞れるというメリットはあるがそのためにソース汚すのもな this使ってないと素人臭がするんだよなぁ
「こいつほんとに分かってんの?」って感じ。
thisは常につけろ、何があろうと。 逆に全部this書いてるのを見ると素人だからわからないんだなと感じる コードの記述量が減るように様々な工夫が凝らされているので、それを使わないやつは知らないように見えるというそれだけのことだが? 原則省略していいよ
基本的には人間の記述した字句解析の手間が少なくなる程コンピューターは速く処理できるべきであり
人間の意図や文脈を解釈できないインテリセンスがまだまだ糞ってことだ >>192
this.で汚染されて逆に見辛くなるんだけど なんかマトリョーシカみたいなクラスの記述を強制するライブラリ使ってると
this付けないと飛び越えて呼んでるときあって気が付かない不具合がかなり凶悪だった覚えがある
多分この取り決めはそーゆークソライブラリ使ったとき用だと思う
通常では絶対イランと思う >>194
そう?
俺は見にくいとは感じないし、わかりやすいからつける派だけど
慣れ親しんだ環境じゃない? >>177
>>180
ありがとうございました。
ファイルストリームと、バイト配列の使い分けを、
教えてもらったことで意識したいと思います。 まぁ、俺にとって見やすい·わかりやすいってのはvsの色分けの効果が大きいとは思うけど 色々なコード読むとthisなんてわざわざ書いてないよね 世の中にはthisを書かないと読みきれないクソソースを書くやつがいるってことだな USBデバイスを仮想COM接続し、SerialPortクラスで受信しています。バルク転送で約2Mbpsとなります。
デバイスからは60byteフレームが連続で送られてきます。DataReceivedでSerialReadして即抜けています。DataReceivedイベント発生時にバッファを確認すると、
60byte→120byte→…→60byte→(イベント発生まで時間が空いて)数kBとなります。
場合によっては内部バッファが溢れているようなのですが、イベントが待たされる条件が解らず困っています。助言いただけないでしょうか。 DataReceivedイベントを使わなければ良いんじゃね? C#でも書けるとは思うけど数MbpsのCOMポートの送受信はC/C++で専用スレッド用意して
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
した上で非同期でやり取りしないと取りこぼすだろうね >>201
とりあえずReadBufferSizeをでかくしとけばいいんじゃね? >>202
タイマー使ってポーリングですかね
>>203
kernel32.dllインポートでやってみます
>>204
試してみたんですけど、16384から上は実動作に反映されないみたいです どうせDataReceivedの中で重い処理をして取りこぼしてるんだろ
受け取ったデータは非同期でキューに入れて別スレッドで処理したらいい その前にSerialのフロー制御はどういう仕様なの?
こっちはPCだからよくても、相手があるんだから USBはシリアルと言いながら実際パケットを送ってるからタイミングが微妙なんだよな
その都度無駄なやり取りが発生して即応性もなくなるし複数の送受信がまとめられてたり
デバイスずっと常にデータを送り続けてる状況を作るとか言う手法があるけど
C#向きではないかなと USBデバイスにボタンみたいのがあって
押すと1離すと0送るとして
1,0,1,0,1,0
みたいにデバイスのユーザープログラム層が送っても
プロトコル層では間の,で
いまデータ受信中かな、送信回線空いてるかなとかデータを送りますよと言う確認など常に処理がある
タイミング次第では 10101,とまとめて送ったほうがいいなと判断されたり送信待ちしてたら平気でまとめて送ってくる
(当然ながらパケットより短い間隔で次を送ろうとしても不可能だし)
それで即応性が皆無になる
それを回避するにはストリーミングで常に状況を送り続けるかポーリングなどが有効だけど
他のUSBの帯域を圧迫してマウスの感度が悪くなったりキーボードの取りこぼしなどが起こる(IO処理なのでCPUを早くしても無駄) >>208,209
つかそんなのCOMポートの層で吸収されてないのか?
シリアル通信で取りこぼすって、まずフロー制御がちゃんとできてないだけだと思うけど >>210
USBシリアルは基本的に垂れ流しするしかないよ
COM側は全二重に見えててもその下で動作してるUSBは半二重のホスト主導のパケット通信だからね
フロー制御用として用意されてるXon/Xoffも停止までに送信タイムラグが発生するから
目視できるような低速通信ぐらいしか役に立たないし、停止を許容できるデータなのかも不明だし >>210
されてないのかと言う質問にはされていないという答え
仮想comポートはあくまでも仮想なのでハードウェア的なcomポートを完全再現できはしない
ハブなんか挟むと致命的
高速データ転送してる場合は何らかの手法でうまくやってる プロパティの使い方でさ
View側から使う分には複雑な式とかメソッド呼とかは仕方ないけど、Model側からもそのまんまプロパティを呼ぶと処理が何重にも呼ばれたり副作用大杉だからなぁ
メンバー変数代わりにプロパティ使うと死ぬる プログラミング用語で副作用というのはハードウェア出力や状態の再設定のことだからイミュータブルなプロパティは全部副作用があるんだぜ 副作用がわからんと資料に書いてあることがわからなくてかなり困るぞ 質問です
DataGridViewで指定行までのスクロールを行いたいのですが、詰まっています
スクロール自体はFirstDisplayedScrollingRowIndexプロパティに値を代入して行えるのですが、スクロールバーのスライダー位置が最上位から変化しません
処理は、指定行を入力→DataSourceの更新→指定行へスクロールというように行っています >>201
多重イベントでスレッドプール使い切りとかない? >>222
そのようでした
直接弄れそうにもないので、別アプローチでの画面更新を考えてみます
ありがとうございました 両端に括弧が付くというのは、
こう書く事を想定してると思うんですよ。
あああ{いいい;}
改行した方が見やすいんでしょうけど、
括弧がずれてるとモヤっとするんですね。
あああ{
いいい;
}
これって誰かが流行らせてこうなったんですかね? >>225
c#はvsでコード整形されると自動で改行されちゃって
あああ
{
いいい;
}
にならねっけ?
スマホなのでうろ覚え 設定で変えられる
デフォがどっちだったかは覚えてないが >>225
昔は表示できる行数が少なかったから、括弧を改行しないほうが見やすかったのよ
試しにウィンドウを80行しか見えないように小さくしてみ
昔の環境を擬似体験できるから納得するかも >>231
80行は現代でも十分に多いと言えるのでは?
マジックナンバーの80はかつて「1行あたりの推奨文字数」として言及されているのをよく見かけたけど、それと勘違いしてるのかな? >>232
すまん、素で間違えた
>>233が正解 自分は関数以外は >>225 の下の方が好きだけどね。
C# のデフォルトはやたら間延びして見える。 俺はPythonの方式が好きだな
C#も最近はあまり文を書かなくなってるからブレースはそんなにないや
あああ(
いいい
ううう);
みたいな 俺はVS信者だからだいたいこれだ
あああ
{
いいい;
}; いちいち悩むのが面倒だからVSの整形まかせだな
コーディングルールがあるならそれに従うだけだし
こだわったところで宗教論争以上にはならんしな フォームアプリで子フォームから親フォームのsplitContaine1.PanelCollapsedをtrueにしたいのですが受け付けてくれません
ボタンコントロールなどは操作出来るのですがスプリットコンテナだけインテリセンスでも出てこないです
どうしたら操作出来るでしょうか? 今のVSは縦に点線が入るのもあって初期の揃え方だと{が完全に無駄な行になってるから
括弧ずれてるほうが無駄が削減されて見やすいな 初めてこの板で書きます。
プログラミングで対角化をしたいのですがよく分かりません。色々調べても自分がしたいことができないです。
やりたいことは、
任意の大きさの正方行列で固有値を求めたい
オイラー方程式を含む行列要素を計算したい
です。
どうしたらいいでしょう、、、 >>244
お前には向いていない
数学ライブラリを買え >>246
まあ、向いてないのはわかってるよ
でも数値計算で必要なんですもん 実際作ってみて何で困っているかとかそういう質問しなきゃ答えて貰えない >>248
ごめんなさい。
問題点は
方程式をとくやり方が分からない。数値計算みたいなことはやったことはあるが、実数解を求めるようなことはしたことない。しかも恐らく4次、五次方程式以上になると思うので、参考となるサイトとかを教えて欲しい。
オイラー方程式などの虚数iを含む式を入れることが出来ない。いい感じの関数とか逃げ方が知りたい。
こんな感じで参考となるサイトとかを教えて頂きたいです。 >>249
だからライブラリ買うとかMathematicaを買うとかしろよ
馬鹿は金を出せ だから言葉の意味を調べろよ
何をするのか自分で全くわかってないだろ?
「いい感じの」で調べられるわけないだろ >>244
言葉悪い人も多いが、ここは「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」だ。
Mathematica使えというのもその通り。もう少し知識つけて出直したほうが良い。 >>244
pythonやR使ったほうがいいよ
そのレベルで留まらずその先の用途を考えてもpython
どうしても連携したいならコマンドラインでpython実行して結果だけC#で貰うことも出来る
自分は画像認識をその手法を使ってやってる よく読んだら実数解じゃないのか
高校生のころ多変量解析用に固有値が求めたくてBASICで計算してた
書籍にデータと結果が乗ってて同じグラフを表示したかった
残念ながらその時は実現できなかった
大学生になってCで組んだらあっさり行けたけどもう何も覚えてはいない if(count ==1){
Debug.Log("output");
}
{}←C#ではこれの省略というのはできないのでしょうか?
pythonのように出来ると楽なのですが。 Pythonと違って複文はインデントじゃなくブレースでまとめるから省略できるのは単文の時だけ IDEやエディタの機能を活用すればC#のほうが楽
Pythonはアンインデントを手動でやらざるを得ない分めんどくさい >>260
ありがとうございます
了解します(´・ω・`) >>261
Python のパーサー書き換えて新言語作ればいいじゃん どう考えても{}あったほうがいいだろ…
メソッドとかやりたいことがひとまとまりになるから管理しやすい インデントでもひとまとまりになるぞ
むしろインデントむちゃくちゃなやつを排除できるから見易いまである >>267
そんな事はIDEにやらせりゃいいんだよ >>265
だからそう思うなら自分で作れよ
本体改造するのが大変ならトランスレーターでもいいし >>270
使いもしないのに文句だけ言うとかクレーマーかよw >>271
Pythonに{}があったほうがいいとは誰も言っていないからもちつけ >>272
Python使ってなくて困ってもないのに
> どう考えても{}あったほうがいいだろ…
って、一体なんの言語の話ししてるんだ? >>275
一般言語の話な
他の言語みんな{}ついてんだから必要なもんなんだよ
わかりやすいし >>276
お前の使う言語はみんな { } 使うのに
> どう考えても{}あったほうがいいだろ…
って意味不明なんだがw python には {} なくても通用してるんだから、あっちのユーザーさんには必要なものではないんだろう。
自分は {} あった方がいいからって理由もあって ruby とかもキライなんだが。
まあ好き嫌い言ってても仕方ない。我らは要望に応えるだけだ。 >vb
loopだったりnextだったりする箇所は別人が引き継いだのかな >>281
basicが作られた時は今のようにブロックで構造化するんじゃなくgotoしてた
つまりifと対応するのはendではなくgoto
10 if a=1 then goto 40
20 rem aが1でないの時の処理
30 goto 50
40 rem aが1の時の処理
50 次の処理
ブロックという概念がそもそも無かったからブロックの形を統一しようという発想もなかった loop 使えるような Basic で関数ブロックを持たない奴なんてなくね?
てか、end はともかく begin なんてキーワードを持つ Basic も見たことないんだが >>283
見たことないのはお前が使ったことないからだな
https://stackoverflow.com/questions/61893042/what-visual-basic-syntax-is-this-begin-end-no-class
あと関数なんて無かった
gosubでサブルーチンを実装してたがサブルーチンもメインルーチンの好きなところに好きにgotoできたしそこにブロックの概念はやはり無かった >>284
.frm ファイルとかをあげるバカが出てくるかと思ってたらマジで出てきたw
今してるのは言語仕様の話な
あとVBに関数ブロックあるし老害はそろそろ黙っとけ あと初期のBASICに関数が無いという話をしてるんだから文盲は口を挟まない方が恥をかいて発狂しなくて済むぞw >>286
残念ながらキーワードに begin なんてないんだなw
https://learn.microsoft.com/ja-jp/office/vba/language/reference/keywords-visual-basic-for-applications
※ vb6 のドキュメントは見つけられなかったので vba のやつな、似たようなもんだし
>>287
>>281 に loop と書いてあるのにお前が勝手に初期の Basic の話にしてるだけだろ なんでVB.NETの話をしてるのにVBAのドキュメント見てるんだ文盲w あとなんで初期のキーワードの成り立ちの話をしてるのに一人loopの話をしてるんだ文盲w >>287
残念ながら文盲は文字自体が読めない人のことだよ
学がなく漢字が読めない
ひらがなが読めない
そういう人
君は文盲が何か理解できてない >>1 が読めないもん同士なんだからどっちも消えろw >>289
バカなのか?
回答に That is VB6 code. って書かれてるだろ
どうせ>284は basic begin あたりで必死にググってきたんだろうけど恥の上塗りにしかなってなくて草
>>290
だから >>281に loop と書いてあるだろ
do loop も知らないのなら黙ってなよw >>1が読めないアスペはいつまでもアホなこと言ってないで消えろよw VB.NETの話にVBA持ってきて恥をかいたのがお前ということは言ったろw
いつまで寝言言ってんだスレ違い まだ、VB.NETとか言ってて草
英語も読めないバカ乙 キーワードバカ颯爽と再登場!
恥の上塗りのよかーんw 悔しいのはわかったからそろそろスレ違いということを理解して出ていけよw お前に言ってるんだよアスペw
言葉遣い同じだからすぐわかるわアスペw アスペとしか言えない恥曝し乙
そもそもid付いてるのに言葉遣いとか頭沸いてるのかよw まだ続けるのか
アスペはしつこいなw
だから他のスレでも軒並みアスペと呼ばれてるんだぞw アスペ文盲 vs アスペ老害
初心者C#「ファイッ!」 >>291
文盲は「自分の名前の読み書きができるか」って基準です >>310
それは間違った知識だな
識字率が著しく低い人がいわゆる文盲
戦後まもなくアメリカのGHQは敗戦国日本は漢字教育が妨げとなっていると感じ
ひらがなや漢字を廃止しアルファベットを導入しようとした
そのために識字率の調査を行った
その結果漢字の読み書きができないものは2%だけなのでその案は却下された
井上ひさしの書籍では識字率の試験を受けた老婆の話が載っていて読み書きは出来ないが
たまたま自分の名前の漢字が含まれていたので正解ゼロにはならなかったと言う逸話が乗っていた
それが間違って覚えてるんだろう >>311
世界中の文盲率を計測するために作られた世界標準の文盲の基準ですよ
あなたの言うような文学的基準では全ての国を平等に比較するのは無理ですね ホリ工モン基準だと日本人の5割は文盲らしいぞ
だからユーチューブとかチクトクが流行る 「識字率が低い人」ってもう何もかもダメそうな表現やな…… アメリカのスラム街の子供は、I no. とかそのレベルだぞ
日本は寺子屋文化で異常に高いだけ >>317
そういうのはスラムとかじゃなくて知的障害の類だからそれで言ったら日本も別に変わらない こう包み込む感じの関数と、括弧内に数値を入れる関数では何がちゃうんでしょうか?
ToString(floatvalue);
floatvalue.ToString(); 関数を作ったやつに聞くが良い
上はエラー
floatvalue.ToString(書式); LinqのSelectでサブセットのプロパティを自動展開して平坦化する方法ないでしょうか?
式木とか駆使しまくれば可能でしょうか
class HogeTable
{
string ID {get;set;}
string Name {get;set;}
:
:
}
=============
var query = from tbl in db.HogeTable
select new
{
Expand(tbl) // <- HogeTableのプロパティを自動展開してほしい
};
↓
var query = from tbl in db.HogeTable
select new
{
tbl.ID
tbl.Name,
:
:
}; 何がしたいのかわからん
その匿名クラスのオブジェクト作る意味あるか? 先の例ではテーブル1個だけですが、実際はjoinしまくりでselectしたいプロパティがたくさんあります
var query = from tbl in db.HogeTable
join fuga in db.FugaTable on tbl.ID equals fuga.HogeID
select new
{
tbl.ID,
tbl.Name,
:
fuga.HogeID,
fuga.Code,
: // プロパティ多すぎて書くのがだるい
}; IT土方にはなりたくないんです!
スマートに書きたいんです やっぱり何がしたいかわからんな
select (tbl,fuga)でいいだろ >>327
それだと
foreach(var row in query)
{
// row.tbl.IDのようにドットが2つになる
// row.IDのようにアクセスしたい
}
後だしで申し訳ないですけど、このあとExpressionで動的に検索かけるので
tblとかfugaとかあると今の私の知識では出来ないんです。。 Expressionで動的に検索って何だ
何がしたいかわからんと再三言ってるんだからまず何がしたいかを説明しなきゃ話にならんだろ ぇ、だからやりたいのは>>322です
Expressionは質問の趣旨とずれます そうか説明したくないなら別に聞く必要ないわ
頑張れ >>322
jsのスプレッド構文みたいな感じ?
ちょっと違うか >>335
ニュアンス的にはそんな感じですね。
ただ展開したいのは値じゃなくてプロパティの方なので、やっぱり動的プログラミングの範疇ですよね C#でJavaScriptを実行する方法
アドレス省略
とかどうだろ?
ゲームだとLuaとかpythonよく使ってたな
自分は使える状態になったもんしかいじったことない なるほどパフォーマンスや保守性を無視していかに質問者の最初の問に矛盾しないコードを書くかという大喜利か >>338
別に変な方法じゃないぞ
ゲームとかパフォーマンスに影響する部分はc++でゴリゴリ書くけど
そうでない部分はc#で
もうゲームシステム部なんて
全部pythonだったりしたぞ
ビジネスアプリでもこれ割とアリだと思うんだけどね
速度を求めてないときに型とか煩わしいだけで無駄だと思うんだよね
かと言ってDictionaryでやっちゃうと完全に型チェックなくなっちゃうし ビジネスでは完全に無しだわ
趣味なら好きにしたらいんじゃね >>321
下に関して、ネームスペースにする必要ありますか? >>341
あ?
上は自クラス内メソッドだろ?
下は参照クラス内メソッドだろ?
同じメソッド名ってのに惑わされるなよ別物だぞ >>324
Ruby on Rails には、O/R マッパーもあるので全自動
Rubyで抽象的に、マイグレーションファイルに表定義すれば、
3大データベース、PostgreSQL, MySQL, SQLite の方言・型で定義される
Railsみたいな、O/R マッパー付きのフレームワークを使わないと、プロにはなれない
Java 土方は、Railsを使えない。
Java土方 vs リモート開発のモダンなRails YouTube のDeanin の動画では、
Ruby on Rails で、Three.js, Godot で、3D ゲームを作っていた オワコンと言われて久しいRailsがモダンと言われたのは何年前の話だろうか >>318
違うぞ、きちんと話せて意思疎通もできるけど、単に文字が書けない知らないってだけ
日本にいたら、そんな人の存在は理解できないけど プログラミンはどれだけきれいに書くかが大事なんでしょうか?
汚いとそれだけで頭がこんがらがります(´・ω・`) >>348
設計レベルだときれいは必須
コーディングレベルだとVSに従ってるレベルであればOK >>348
その通り
ただ君の考えるキレイと優れた開発者の考えるキレイが同じとは限らない 可読性の高い、Ruby がベスト。
他の言語は可読性が低いから、作った瞬間から産業廃棄物
だから皆、新規で作って、作り逃げする。
自分が作ったものでも、改修できないからw >>353
正論
Ruby以外の言語をやってるやつはサタン 可読性が低いことで有名なPerlを受け継いだRubyの可読性が高いって何の冗談なんだか なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください enum型をintにするには (int)hogeでいけるが
Hage<T>(T value) の時、valueをintに変換
var result =(int)vale; だとエラーになる
どうすればいけるんですかね? Hage<T>(T value) where T: Enum >>359
一度objectに変換すればOK
var result = (int)(object)value; >>360
今回はすべてのタイプを取り込んでからEnumのときだけやるのでこれは使えませんでした
>>361
コレで行けました
ありがとうございます そもそもintにしなきゃいけないならenumなんか使うなと思うが・・・ >>364
intのままだと値域を制約できないが、代わりに何を使えばいい? ジェネリックついでに横から質問させてください。
省略可能引数にジェネリック型指定した場合、呼出側でコンパイルエラーになります
// 呼び出されるメソッド
void Miku<T, U>(List<T> vol, U negi = null) where U : class
{
}
// 呼出側
hatune.Miku(list); // CS0411 メソッド 'method' の型引数は、使用法から推論することはできません。 型引数を明示的に指定してください。
回避策ありますか? だってエラーメッセージ通りだろ
どうやってUが何の型か推測できるんだよ
対策はエラーメッセージ通りに明示的にかけ 人間はミスして当たり前
何かあったら自分が間違っていることをすぐに受け止めないといけない
そこが入り口
何十年もコード書いてるけどミスだらけ
まずはしっかりとエラーメッセージを読むしかない
にしてもお前らジェネリック好きだな
自分はジェネリックのメソッドなんてほぼ書かないよ 汎用ライブラリみたいなのでジェネリックはありうる
でも自分の使うライブラリのメソッドでは出番はない
クラス設計終わってるしinterface使わないでジェネリック単体なんてことはまずない
そこを汎用的に作る意味ないしコード重複もない おまえがジェネリックを書くかどうかなんてどうでもいい、チラ裏にでも書いとけ 普段のコードでジェネリックを使ってたら大体何かが間違っている ジェネリックをほとんど使ってないやつのコードを見ると単一責任原則に反してるケースが多い typescript(javascript)にはオーバーロードがないからな
普通に書けばいいのにわざわざ難しく書いて機能がないとか言い出すのはどうなの デフォルト型引数を導入は完全な上位互換ではなく何かしらの不都合があるからないってことかな?
よーわからん。 typescriptは出来立てはきれいな文法や仕様だった
ところが素のjavascriptの仕様がひどすぎてどんどん仕様追加していって
全部の機能を把握してコード書いてる人間はいないんじゃないかと言うぐらいカオス状態になってる もちろんオーバロードも考えましたけども。
Mikuメソッドが30行くらいあって、negiが指定されてる場合に処理の真ん中あたりの2,3ステップだけnegi処理をやるっていう
すっごいオーバロードに向かない作り。
記述量も増えるし、一概にオーバロードっていう考えもどういうものかと。
それにメソッド定義時点で警告も何も出ないので、何か呼び出せる書き方があるのかなと思った次第です void Miku<T>(List<T> vol) => Miku<T, object>(vol);
この1行足すだけやん
コピペで作ろうとしてる? まちがえた
... => Miku<T, object>(vol, null); >>383
警告出るわけがない
出るならコンパイラがおかしい
hatune.Miku<List<Person>,Address>(list,place);
みたいに型を省略しないでかけばいい
どちらにしても本当にジェネリック使うのが正しいのか考え直して欲しい where U : classの必要性がわからん
何も渡さないなら
Miku<T>(List<T> vol, object negi = null)
で良いんじゃないかとしか思えん 中括弧というか、中括弧行がほぼ、空白行にみえて、鬱陶しい
vbしかやってこなかった弊害だな スコープが変わるからインデントを入れても空白行を入れても問題ない程度にはコンテキストが違うぞ
空白行は複数行のコードをいくつかのまとまりに分ける時に使うだろ? EntityFrameworkについての質問です。
同じDB(SQLServer)で2つのテーブルを使いたいのですが、現在すでにEntityFrameworkで登録しているテーブルに加え、
もう一つ別のテーブルを追加したいときどのように記述すればよいのでしょうか。
DataContextクラスをもう一つ作らないといけないのでしょうか。
よろしくお願いします。
https://imgur.com/w35hFzI.jpg print(1%3);
なんでこれの結果が1になるんでしょうか
0.11111111になるかとおもってたんですが >>389
中カッコが空白行っぽくみえるからVBで入れてた空白行をいれなくてよくていい感じだが
>>391
そもそもその一つ目のテーブルどうやったんだよ?
同じ手順で追加できるんじゃね すみません自己解決しました
public DbSet‹Article›~の下に
public DbSet‹追加したいテーブルのモデル›プロパティ名ゲットセットを追加して
ソリューションのMigrationsファイルを削除してやってみたらいけました >>396
同じ手順でやってみたのですがマイグレーションズファイルの中身が邪魔してたのかもしれません bool rangeFunction(float value,float min,float max)
{
if(value > 0 && value < 3)
{
print("範囲内です");
return true;
}
return ;
}
ifの外でリターンを返すにはどうしたらいいんでしょうか?
範囲指定の関数になります。
もし範囲内であればtrueにします return value is >= min and <= max; つかprint(って何だ)をそんな変なところに入れんな >>393
%は余剰(割り算の余り)を求める演算子
1÷3=0余り1 >>400
下の方のreturn ;をreturn false;にする >>393
もし良ければ、0.11111111 になると思った根拠を聞かせて 0.11111111.…(永久に循環)だったら =1だから間違ってはいないけどそういう問題でもない 算数苦手なんだろ
1/3が0.333...だから余りは1-0.333...×3で0.111...という発想なんだろうな
それでも0.000...だけどな print文はrangeFunction()呼び出し側に実装すべき VBSのこの配列はC#でどう表現したらいいのでしょう?xyhwはintです
data = Array(Array(x, y), Array(x + w, y), Array(x + w, y + h), Array(x, y + h))
COMを使う引数用配列の定義なのですが、これはCOMに型が違うと怒られました
var data= new int[][] { new int[]{ x, y }, new int[] { x + w, y }, new int[] { x + w, y + h }, new int[] { x, y + h } }; どういう型なのかVSが正確に教えてくれるのがこの言語の良さだが教えてくれないのか?
具体的にCOMのどの関数? photoshop.applicationのActiveDocument.Selection.Selectです すみません。doubleでした。が、これでもエラーは変わらずです
data = new double[][] { new double[] { x, y }, new double[] { x + w, y }, new double[] { x + w, y + h }, new double[] { x, y + h } }; 自決。これでいけました
data = new object[] { new object[] { x, y }, new object[] { x + w, y }, new object[] { x + w, y + h }, new object[] { x, y + h } }; 自決が自殺のことと知らず自分で勝手に言葉を作るやつが増えたんだろ お前らノリじゃなく本気で知らんだろ
最初は俺も「さすがにそれを知らんやつはいないから冗談だ」と思ってたんだぞ varで勝手に型決めろって言っといて型が違うとか傲慢なw varは型推論
型を自由に変えられるのはvbならvariant
C#ではCOMはdynamicで受けるのが定番 勝手に決めろというか推論だから、違ってることもあるんじゃねーの? objectじゃなくdynamicだっつってんだろw
objectにしたらobjectの持ってるメソッド以外使えないだろ >>403
なんで0.11111があまり1になるんすかね(´・ω・`) >>429
0.11111ってどっから出てきたの? 基本的に型が合いませんって言われたらobject型を疑うようにしてる
クラス名の型にぶち込めばなんやかんやで動いてくれる >>401
どゆこと?特定の範囲内に収まってればtrueを返したい >>429
整数しか無い世界の話に少数持ち出すなよw あ、なるほど
0.33333333×3=0.99999999だから
余りは0.11111111ってことか!
完全に理解した >>433
関数内をその一行だけにすれば特定の範囲内の時にtrueでそうじゃない時にfalseが返る
printはその返り値で分岐したらいい >>437
小学校でそう習わなかったか?
4÷3は1余り1
少数を使わないために余らせてるのに使ってどうするよ
1÷3は0余り1だろ
1個のリンゴを切らずに3人に平等に分けると1人0個ずつで1余る りんごじゃ半分にすればいいじゃんってなるから
もっと分けられないものを例えにした方がいい 切らずにつってるのに切るバカには何言っても無駄だから 数直線を切る
デデキントの切断
整数を切断しても整数しか発生しない パブリック変数がスクリプトの銭湯二ズラーっと並びますが、これを折り畳める昨日はないのでしょうか
関数みたいに【】でくくることは出できないですし 記事検索の機能をつけたいのですが
Title,Contentパラメータの入ってるリストで検索ワードで検索しどちらか片方でも入っているものを再度別リストにしたい場合ってどうやるのですか?
FindAllは完全一致じゃないとだめでしたよね? var newList = list.Where(x=>x.Title.Contains(hoge) || x.Content.Contains(hoge)).ToList(); >>452
ありがとうございます
LINQ構文使うんですね プログラミンはある時を超えると急速に上達したりするでしょうか?
学習曲線というか
停滞しすぎなので、そうであればやる気になりますね 初歩の方で躓いてたらそうかもしれん
右肩上がりの階段状の成長曲線かな >>455
組めるようになって、組んだもののチェックができるようになったらそこで一旦は終わり
定年までハナクソでもほじっていればよい まあオブジェクト指向とかは書いてて初めて恩恵を感じてると理解したときになるほどって思ったことはあったな
設計もそうだけど 世の中にある事象をある程度プログラムできるようになったらそこでいったん終了
ゲームでも作ってコードが汚いけど確実に動かせるレベルだな
次は他人のプログラムを見て設計的なことを学んで理解できて自分で同じように書けるようになったら次も終了 初学者のうちで一気に理解が深まったタイミングは
・デバッガが使えるようになった
・テストの必要性を感じて書いた
・リファクタリングできる気がしてやってみた
とかかなぁ
多分学習進度との関係もあると思うけど、思考が切り替わった気がした 最近の人はアルゴリズムを勉強しないらしいので暇だったら勉強してみ 頑張ります
unityやってます
デバッグは確かに課題です
どの部分に問題があるか分からなくて1日潰れる ゲームのデバッグは経験かな
再現性がないと地獄だけどそのうち多分ここがおかしいとある程度わかるようになる
それまではこんなものかと思うしかない ゲームはどうやってテストしてんのか想像つかん
仕様書とか無限に分厚くなるだろ ゲーム開発者だけど仕様書なんて先ずの実装が終わったら最後に辻褄合わせする位だよ。放置も多々ある。
後半はデバッグで出たのを出来る限り潰すイテレーションなのでデバッガーとプログラマーのやり取りで終始する感じ。
期限も工数も有限なので落とし所が大事 プログラミンはどれだけきれいに書けるカノ勝負でもあるんでしょうか
整理整頓されていないと頭がこんがらがる >>470
コーディングが綺麗かってのと
構造が綺麗かってのはイコールじゃ無いからなぁ Unityから始めたやつはだいたいその場しのぎのコードを書くしそれを教えたがるからUnity関連の情報はそんなのばっかになる でも正直unityに機能がないときはやらない仕様に変えたほうがいいまである
別に仕事でやってんじゃないし クラスかタプル作ってオブジェクトの配列にすればいいのにやつら平気で複数の配列を使うし何でもかんでもシングルトンにするしそれ継承しなくていいだろってやつ継承するしnullチェックしないしバグ有りの同じコードを関数に切り出さずいくらでもコピペするしUnityのC#はマイクロソフトのC#のサブセットと信じてUnity関連以外の情報信用しないし プログラミング関連情報サイトは、自分の勉強がてらそれをネタに記事書いてるのが多いからな
言い方変えると初心者が記事書いてるからそんな情報ばっかになるんだよ >>476
小規模ならそれで十分
そんなところでわざわざガチる必要ない >>479
だからいつまで経っても成長しないしすぐ困って人を頼らなきゃいけなくなるしできない癖に妙に偉そうだし >>480
なぜシングルトンのほうは静的クラスではいけないのでしょうか? >>482
そりゃそういう要件だからとしか
例えば上で上げたのはインターフェイスを実装してるだろ?
インターフェイスがインスタンスメソッドを要求してるからインスタンスを作らざるを得ない >>483
㌧
他にも静的クラスではなくシングルトンでないといけないケースはありますか? その二つならインスタンスが必要かどうかで全て言い表せるんじゃね
Unity界隈だとインスタンスを見失うからという間抜けな理由でシングルトンもどきを量産してるけどそういうのは普通引数で渡したりサービスプロバイダを使う
これらを使えばわざわざシングルトンとして設計する必要がない 「インスタンスが必要なケース」とは何でしょうか?
「インスタンスを見失う」とはどういう話でしょうか? どこからでもすぐ呼べる便利クラス…にしたいけど
ぶら下がってるものがたくさんあるからインスタンス渡しでシングルトンなんじゃね?
使う側に配慮してんのさw public class Singleton {
public string Name { get; set; } = "HAGE";
private static Singleton singleton = new Singleton();
private Singleton() {}
public static Singleton GetInstange() { return singleton; }
}
var singleton = Singleton.GetInstance();
var name = singleton.Name;
↑このようなものはシングルトンを使わずに、
public static class NotSingleton {
public static string Name { get; set; } = "HAGE";
}
var name = Singleton.Name;
↑このように静的クラスにすればいいと思うのですがシングルトンが必要な「インスタンスが必要」というのはどういうケースでしょうか?
シングルトンで保持するオブジェクトのクラスが他の設計者のものならこのようにはできないと思いますが、シングルトンのクラス自体のオブジェクトを保持するのであれば使い方も自分で決められるのでシングルトンにする必要性が分からないです。
そのようなケースでは使ってないという認識で合ってますでしょうか? 静的クラスだけどインスタンス管理を独自でやって別オブジェクトを配るのはファクトリーだっけ? >>489
結果的にシングルトンにする場合でもそれを使う側はそれがシングルトンだと意識しない方が後で変更する時に助かる
そのためにはインスタンスが必要
class Foo : IFoo {
private IBar bar;
public Foo(IBar b) => bar = b;
public void DoSomething() => bar.Hello();
}
class BarSinglton : IBar {
private static BarSingleton Instance { get; } = new BarSingleton();
public void Hello() => Console.Write("world");
}
var foo = new Foo(BarSingleton.Instance);
foo.DoSomething()
//////////////
class NewVersionBar : IBar {
public void Hello() => Console.Write("im not single");
}
var foo = new Foo(new NewVersionBar());
foo.DoSomething();
シングルトンじゃないのでFooは変えなくていい
シングルトンだとFooも書き換え必須 最後間違えた
静的クラスじゃないのでFooは変えなくていい
静的クラスだったらFooも書き換え必須 要するにDIするときにインスタンスが必要になるってこと
DIがなぜ必要かはSOLIDの原則を調べればわかる singleton とは、インスタンスを2つ以上作れらたら、マズイもの
よくあるのが、何々マネージャーみたいな管理オブジェクト。
管理者は1つで、その管理者が複数のインスタンスを作る。
この場合、管理者が2つあるとマズイ
1つしか存在してはならない、絶対的なもの。
神とか ひとつしか存在しない絶対的なものは「自分を認識する意識」くらいのものだ ㌧
静的クラスとするよりもインスタンス化してから利用するように設計するほうが色々とメリットがあるのですね >>481
偉そうとか言い出すとコンプレックスみを感じるな。 >>499
何で人に物を聞くときに「聞かれたことにだけ答えろ」みたいな大きな態度を取る初心者にコンプレックスを感じなきゃいけないんだw 文字列もクラスもメソッドも全てが数値のみで管理されており
その数値のみでソースが無いプログラムでも今日制定に
流れを変更できるようになったら一気に理解が深まる。
オブジェクト指向だ、関数型だ、設計がー、なんてのは
一番浅い層の肌の色ぐらいにすぎない。 >>501
たしかになんか理解が深まったんだろうな
ただ機械側によりすぎて、お前の日本語は全然意味分からんw >>500
そりゃ「お前のうんちくは今は要らない」と思われるからだろ。 >>504
だからお前はいつまで経ってもコピペしかできないんだよ >>505
コピペでわかるようなことを答えてるからでは?
俺オジサン側だけどあんまり悪い気がすること聞かれないぞ。聞かれた事しか話さなければ、案外聞いてくるよ。
「これ長いけど」って言ったら「今は良いです」とか言いよるけど、後で聞きに来たり。
関係性でしょこんなの。 >>506
今いい関係性を築いてるつもりなのかw
とりあえず>>1を100回読んで首釣って来いw >>509
しつこいな妬むなよw
お前がコピペしかできないのはお前の努力不足と才能不足で俺に責任はないぞ
>>1を100回読み終わったならすぐに川に行って首が釣れるまで帰って来るな お前は草と首の区別もつかんのか
つくづく使えんやつだな
だから人間関係もうまくいかないんだぞ そのうち消えるんじゃね
お前も>>1を100回読んで消えとけよ おい俺に言うのはわかるが、八つ当たりはやめとけよ。 また来た
スレチだから八つ当たりしてないで早く消えろよ 俺リアルで他人からお前らが言われてるようなこと言われたことないぞ
マジでスレチだからもう書くなよ ネット上でもわかるこのキモさ
リアルでも煙たがれてそう。 ていうかこのスレってコンプレックス持ち多すぎて書きにくいって前から思ってたわ
ちょっと変な初心者の話をしたら刺さったやつがすぐ絡んで来るから そんなんだからSESしかできないんだよ
もっと社会性を身につけないと 今HTMLとCSSでゴリゴリやりながらアプリ作ってるけど正直めちゃくちゃめんどくさい
自由度はHTMLとCSSの方が高いのかもしれんけどXamlとC#のGUIの簡単さってすごいなって思った >>529
俺は最近逆の感想しか抱いてないな
HTML/CSSの方が楽に綺麗な外観作れるし何よりもjsが超楽に非同期使えて有難すぎる
C#もお手軽シングルスレッド非同期あれば良いのにな
Unityのコルーチンもjsと比べるとめんどすぎ HTMLとCSSが楽で良いと俺も思う。なんせ自分がやらなくてもデザイナーの人に入って貰えるし、それも単価が安いし。
最近はCSSも高級になったし、WebView2が使えるようになったのでかなり楽よね。
IEコンポーネント使わないといけないなら同意 単純なやつならxamlの方が楽だけどちょっと凝ったデザインにしようとすると記述量がめちゃ増えるのはなんとかしてほしい CSSも増えるくね?
今Wiki作ってるけどマジで思うような挙動しないわHTMLとCSS
divを左と右に分けるのでもfloat:leftとfloat:rightの2つのCSS書かんといけないの面倒くさすぎる
文字を下揃えにするのもverticalalignmentとかhorizontalalignmentとか手軽なのがない >>535
すげえジジイがここにいたw
floatとかいつの時代だよwww
それでこんなにcssクソクソ言ってたのかw
オメーの無知で吠えてるんじゃねえよ >>535
今どきそんな太古の手段を発掘しつつわざわざ車輪の再発明をしているのはキミくらいのものであって、あえて言わせてもらうと、それらは文字通り「時間の無駄」でしかない
どうしても車両の再発明をしたいってことなら止めはしないけど、せめてモダンなCSSやフレームワーク等の「習作」として作成しよう IEコンポーネントじゃないならflexとgridかな。
IEコンポーネントはバグが多いからかなり辛い。float使うのもわかる。
この調子だとHTMLも文字列で作ってそう。
適当なフレームワークに乗せるのが良いよ。MVVMにできるし。 >>536>>537
むしろjsにasync awaitあるの知らないんだね
未だにコールバック地獄でもしてんのかなw C#のasync awaitの話では?
なんか不自由あるんだろうか。
まあJSみたいにPromiseと可換になってると便利なのになと言うことはあるけど。 >>541
flexは頭にもう一個div入れないといけないじゃん あとそんなもんネットに言え
こっちは色々調べながら最善の答え見つけとるんじゃ 最善の見つけた答えがfloatww
ネットの調べ方もジジイレベルかよww >>547
flexbox使え
すべてが解決できる >>524
thx
HTML & CSS は確かに便利なんだけど、たまにやるときれいさっぱり忘れてて思い出すのに時間がかかるのが難点。
なんというかクセというか、コツというか、そういうのを思い出せないと思うままにならない感じ。 そりゃ初心者のうちメンタル弱くてやる気のない人が対象のスレだし回答してるのもおかしなこと言ってるのが多いから初心者なんだろうね >>544
入れれば良いのでは?
まあbodyもflexにできるけど。
上揃えも下揃えもflexの方が楽だけどなって。
xamlで言うFlexLayoutなので、多分こっちの方がxamarin以降のXaml移行組は楽だと思う。 HTML+CSSってブラウザエンジンが必要になるのが馬鹿らしい C#使ってる時点で利便性と引き換えに今時のパソコンなら問題ないと無駄を許容してるんだからそのくらい許容しろ >>556
とはいえWindows使う以上絶対載ってるし、現存する、ほぼ唯一のまともに日本語を表示できる描画エンジンじゃない? >ほぼ唯一のまともに日本語を表示できる描画エンジンじゃない?
ブラウザのテキスト表示もOSの描画エンジンを使っていると思うが。 >>558
ごめん何言ってるかわかんない
酔ってる? >>559
オプティカルで文字を詰めながら禁則処理しつつ、左右均等揃えなんかしてくれないよ。
ttps://www.google.com/amp/s/ics.media/entry/14087/
>>560
そういう所だぞ すまん、あげたサイトはオプティカルじゃなくてちゃんとメトリクス使ってるんだな。 >>561
酔ってないのにそれかw
だからお前はリアルでも一人なんだよ いやいやw
現存する、ほぼ唯一のまともに日本語を表示できる描画エンジンって表現はおかしいだろw え?ホント?みんなそんなに完璧に文字描けるの?そこまで請われることが無いとか…?
エッジケース考えたらブラウザ一択なんだけどな…。 自力でコマコマとエンジンの挙動を微調整せずに一発で縦書きできるものがあったら逆に教えて欲しいわ… カーニングは昔からあるし、DirectWriteなら均等揃えもできるようだな。 >>572
まともにやるとIPAフォントあたりがかすれる。
それに、APIであって、エンジンじゃなくない…?
FormsとかWPFのレベルの話してるつもりだったんだけど。 ここってこんなギスギスしたスレだったっけ・・・
精神的に余裕ない人が流れ込んできたのか元からいる住人が加齢で狂ってきたのか マウンティングが多すぎるよな
もっと謙虚な人が増えてほしい メンタル弱い豆腐初心者のスレがどうしてうまくいくと思えるのか
そりゃ豆腐が集まって自壊するに決まってんじゃん 適材適所でいいんじゃね、と思う
メニューとかリストとか、Windowsライクならxamlで
縦書きにしたいならhtmlで >>577
これはそうだね。語気が強かった。すまん。
まぁ、立ち戻って聞かれたこと答えて行くことにするわ。 あまり詳しくないんだからトンチンカンなこと答えなくていいと思うぞw 余計なこと言って「聞かれたことだけ答えろ」って思われても嫌だもんな メリットがわからない時はしなくていい
変数を使うと呼び出す関数を動的に変更できる 了解す(´・ω・`)
動的というのが普通の関数との違いなのでしょうか コールバック関数とか?
クリックしたら○○しろとか
ツリーノードは色を塗るとき□□の処理で塗れ
とかの○○や□□の処理をインスタンス毎に後から設定できる よく使うパターンは関数の引数に関数を渡すやつ
static void TripleCall(Action action){
action(); action(); action();
} スレッドも登録元が関数を指定する必要があるから、動的に入れている WinFormsで自動でボタンを押した時の処理が追加されたりするけどそれも
結局はその関数をイベントリスナーに登録している(つまりイベントリスナーに追加するときに関数を引数にしている)
知らずに使っている事が案外あったりする 引数は変数だぞ
イベントハンドラを登録する時には演算子を使うけどその奥ではイベント登録関数の引数としてデリゲートが渡されてる プロパティに式を仕込むと、思わぬ副作用があって詰むぞ
少なくとも中から呼ぶときくらいは実データにアクセスしようず >>593
ラムダ式はデリゲートを作るための書き方にすぎんよ
それがデリゲート変数に代入されて初めて関数になる
Expressionに代入されると関数じゃなく式木になる >>594
お前は式という言葉の意味も高階関数も知らんのか 助けてくれうぜぇやつに絡まれたんだがHttpClientでjsでロードされる画像のURLを取得する方法ある?
プログラミングって実際もの作らないと身につかないよな
https://mi.5ch.net/test/read.cgi/news4vip/1667395380/ >>597
まずそのスレの1がうざい
どうせお前だろ >>598
俺だけど?
それより絡んでくるやつのほうがウザくね? jsでロードされるってなんなの?どういうこと?
HTMLに書かれたJavaScriptを動かしてHTMLというかDOMを更新して結果表示される画像のURLを取得したいってこと?
HttpClientで取得したHTMLをWebViewなりで解釈して実行しないとダメでは?ならWebViewで直接やれよという話でもあるが。
JavaScriptだけでロードされてるわけでもないんだし。 >>600
多くの検索エンジンの画像検索は最初から全部画像を読み込むと膨大な量のデータをやり取りしないといけなくなりサーバーの負荷が大きくなるので
スクロールするとjsによりほしい分だけデータがロードされるというふうな実装になってる
俺はこういうサイトだとWebViewでjs使ってスクロールしてデータをロードさせてるんだけどこのクソうぜぇやつが言うにはそれはインスタントカレーで湯煎しかしてないゴミカスだと言ってくるわけ だから、それはJavaScriptだけではなくてDOMがないとあかんのではという話。
エンジンとして何を用意しないといけないか変わってくるじゃん。
(JavaScriptで画像を取得するロジックを走らせる、という言い方だと、プラグインシステムがJavaScriptでできてるとかそういう話になるんでは?)
スレ見てきたけど、そう言うところがダメなんじゃないの? DOMじゃなくてRegexでhtmlのimgタグの中身取ってきてるんだが
たぶんこいつはDOMを使ってないDOM使ってたらもっと謙虚だろ
むしろこれでDOM使ってたらブチギレるわ 要はこのうざい奴はjavascriptでやってることを解析してC#するのがスマートだと言いたいんだろ
実際はアホな努力だが つっても画像検索の読み込みくらいなら単純なのかもな たった1行の処理でも関数化してもいいのでしょうか?
大げさな感じもしますが >>561
ケースバイケース
よくあるのはその関数を多くの場所で使っててなんかの拍子にその関数をおっきに変更することが想定される場合
あとはその関数にわかりやすい名前をつけたい場合とか >>604
だよな
なんでこいつはこれでイキってんのか不明 JavaScript なら、scrollTop とか、
最近は、IntersectionObserver とかもあるらしい とりあえずjsでできることは全部c#でできるようにしてくんないと
誰かポリフィル作れということか >>603
imgタグを作ってるのがJavaScriptのDOM APIじゃない? >>611
つまりこいつはDOMを使ってるくせにイキってたってわけか?
だっさw >>614
DOM APIを作るの?ちゃうでしょ…。
BlazorのうちWebなものはDOMを(もちろん内部的にはDOM APIを使って)作るけど、DOM APIを作ってるわけじゃ無いでしょ。
あくまでブラウザ、WebViewだったりWPFやXamarin.formsといった、レイアウトやレンダリングを行うエンジンへの架け橋で、そのレイアウト・レンダリングエンジンがWebViewなら、それはDOM APIを使って実現されると言う感じで。
これが俺が想定してたレンダリングエンジンで、その主語がデカかった理由。 つまりそのGoでスクレイピングを作ってる奴は結局ルウからカレー作ってるように見せかけてインスタントカレー作ってたってことだろ? じゃあWebView使ってスクレイピングする方法と何ら変わらんだろって思ってブチギレるわけよ
あんだけ突っかかってきて作ったのインスタントカレーじゃんwってなるわけよ DOM → Document Object Modelなデータや構造
DOM API → Document Object Modelなデータや構造を操作するAPI群
という一般的な定義で話してる。
jsのライブラリで言えばparse5とかとjsdomの違いぐらいの話。jsdomがDOM APIを持ってるのが話がややこしい。 >>617
何を怒ってるかわかんない。甘く見られたって事?
そんな事で怒らんでも良いじゃん。アホ過ぎるとこっちの話が理解できないこともあるよ。俺は計算資源さえ許せばちゃんとレンダリングした方がええでしょ、WebViewでもpuppeterとかでも。
うーん、jsとdomをエミュレートしてレンダリングするタイプは、要は突き詰めるとヘッドレスなブラウザを作ることと変わんなくなるので、確かに味は変わるが、ルーから作ると失敗するぞ言いたい。 >>615
何を言ってるんだ
スクロールに従って画像を表示するのにDOMは使わないって話をしてるんだよ
<img src=@(img)/>と書きゃimg変数のURLにある画像が表示される
画面に表示されるとこだけそのタグを作る
タグを作るのにDOMは使わない
そういう話だ >>621
え?何言ってるの?「DOM APIが何かわかってる?」に対して「Blazorはそれを…」の返事に「違うよ」って返したんじゃん?
しかも、結局それBlazorはDOM APIを使って画面に表示するところだけそのタグ作ってるからね。 とりあえず元のスレでやれ
何がしたいのかよくわからんがお前がウザいのはわかった
スクレイピングの話なら素直にセレニウム使っとけ >>623
だからSelenium使わずにWebViewでやったらキチガイがSeleniumやWebViewは初心者wとか言って絡んで来たんだが 読む気にもならんから知らんが初心者が初心者向けの方法を使って悪いことは何もあるまい
お前が上級者だと言うなら他のやり方を気にせず上級者のテクニックを使ってスクレイピングとかいう糞みたいな作業を続ければいい >>625
バカにされたままだとうぜえからこのスキル使えるようになりたいと思ったがなんか無理そうだな Javascriptのインタプリタをつくればいいだけじゃないの? 漏れは、Ruby Selenium Webdriver で、ブラウザを自動操作してる。
サイトのログインとか
更に、Nokogiri でスクレイピングもできる MAUI「htmlを、regexでアクセスしてる」
うざいやつ「htmlは、DOM APIでアクセスしろ」
って事?? ていうかさあ
よそのスレで起こした(しかもお前が立てたスレの)揉め事をこのスレに持ち込んで助けを求めるようなことするなよ
ここで付け焼刃の知識を仕入れて建てたスレでイキりたいんだろうけど
そんなことやってて恥ずかしくないの? と思ったらMAUIの人か
じゃあ諭すだけ無駄か・・・・・
まあなんだ、VIP板とやらで頑張ってくれ
こっちに帰ってくるなよ MAUIに変なイメージついたな
マウイ高校の人に謝れ せっかくXamarinについた変なイメージを隠したのにな。 なんで俺は.NET MAUIの地位向上に努めてるのに避難されなきゃいけねぇんだ >>628
・まともなクローラーが作れない
・テストを知らないから、未完成状態でサイトに頻繁にアクセスする
・例外処理の設計ができていないから、サイト側からフィルタされてもアクセスし続ける
結果:監視カメラの前で裸踊りしてる様子を記録されていることに気が付かない
スクレイピング対象になりえるサイトのデータの二次利用は民法的に大体アウト(良くてグレー、真っ白は基本的にありえない)
そのクソみたいなアクセスのせいで、サーバリソース追加しなきゃならんケースがあるからサイト側からすると迷惑でしかない 散々イキりまくった挙句技術力不足で他人を頼ってくるとか情けなさすぎる
MAUIの地位を貶めるためにやってるんじゃないなら相当やばい >>638
ヘッドレスブラウザでトライ&エラー繰り返されたらあれだろうがHttpClientでhtml単品要求してくるくらいなら別に自由にしたらって思うけどな HttpClient使わないとrobots.txtが取りづらいよな?という嫌味ならなるほどなとは思う。 boolでは2つの返り値を持つ事はできないですか?
https://i.imgur.com/6s9o15k.jpg
ゲームで接地判定を作っているのですが、真ん中からレイを飛ばすと崖でレイが反応しなくなるので、このように両脇から2本飛ばしています。
判定用の関数を作ってます。 >>640
同じアドレスにウェイトなしアクセスをぶん回してくるやつとかいるんだぜ >>642
boolでは2つの返り値を持つ事はできないです。
なぜならboolはメソッドではなく型だからです。 Win32/C++
BOOL GetMessage(略) ・・・ >>642
(bool foo, bool bar) F() {
return (true, false)
}
var x = F();
WriteLine(x.foo);
WriteLine(x.bar);
(var a, var b) = F();
WriteLine(a);
WriteLine(b); >>646
bool型の関数の場合は1つしか持てないじゃないでしょうか 戻り値では無く引数にrefでboolを2つ渡せばいいんじゃ無い タプルってディクショナリーで複合キーみたいに使えるんかね
dict[("aaa",1)]=456.8 複数の引数を戻り値で受け取りたいとか言う奴いるけど
参照でええやん・・・ >>655
参照?どういうこと
普通に関数2つ作るのがシンプルかもしれませんね プログラミングは日本語で言語化することが大事でしょうか
それがフローチャートだったりするのでしょうが 「何をするプログラムなのか」「なぜこうするのか」といった仕様や意図を自然言語で分かりやすく正確に記述できる能力は重要
一般に日本人はそれを苦手とする者が多く、安易に図表に頼ったり、
自然言語で書くとなるとプログラムと逐次対応するような低レベルな記述(実質的にExcel方眼紙上でコーディングしているだけ)をする傾向がある 文章でグダグダ書かれるより図表や擬似コードで書いてくれた方が100倍マシ visual transformer を図表無しで
納得させる資料を書いてから言え 質問者は投稿する前に、自分の質問をよく推敲しろよ。これはC#初心者以前の問題だ。
文章が意味不明で相手に伝わらず、あほな質問だと思われたらそれなりの答えしか返って来ないぞ。 >>657
大事ではないけど
言語化と言うかもともと何をしたいのかと言うことがはっきりしていて
それをコードに落とし込んでいるはず
ところが後でコードからその何をしたいかが読み取れない場合があるので
おおまかなコメントなどを残すことになる
細かく内容を記述するのは無駄だしコードを手直しするたびに書き換えるのは無理だ
フローチャートは階層が深くなる複雑な制御構造になる場合に脳で追いきれなくなる場合に描いたりすると便利なんだろうけど
大体みんなちゃんとしたものじゃなくて流れを落書きする程度だと思う >>657
よく言われるのは「How」はコードで書く
「What、Why」は自然言語や図表を使って書く、、、てこと >>663
>>664
どうも
きれいなコードを書くことでフローチャートはいらないのかもしれないですね
処理は言語化しないと何をしてるのか分からなくなったりしますね フローチャートなんてアセンブリ言語でしか使わんぞ
もしかしたらCでギリギリ使うこともあるかもしれんがオブジェクト指向言語では必要ない
オブジェクト指向言語でフローチャート使わなきゃならんとしたらその前にまずオブジェクトの設計がおかしい >>667
宣言的プログラミングだね
理想的だけど手続きを全て無くすのは難しい
コードはどうしてもハイブリッドになってしまう オブジェクト指向言語で処理の流れを図示するならシーケンス図やアクティビティ図
静的な構造の図示はクラス図やパッケージ図 アクティビティ図書くなら
フローチャートのがわかりやすいな VSがある程度自動的にクラス関係図生成してくれねぇかなあ クラスデザイナーというのがあるからインストーラの個別のコンポーネントで検索してみろ >>672
あれってCore系未対応じゃなかったっけ? >>668
HowだけでなくWhatもコードで表現しようとするのと宣言的プログラミングはちと違うんだが
いずれにしても重要なのは「仕様のWhat」を「コードのWhat」として対応付けること >>671
クラス関係図ではないけどあるクラスのメソッドやフィールドと他のクラス(または外部ライブラリdll)への関係を図示するだけならコードマップ表示がある Windowsフォームアプリ(.NET Core)のスケルトンコードより
フォーム初期化処理(InitializeComponent()メソッド)
https://i.imgur.com/ukmU36Z.png >>674
ほとんど同じだよWhatをコードで表現しようとすると自然と宣言的になる
というか宣言的プログラミングがそういうもの
どうやってではなくてどうなって欲しいかを記述する >>675
使用環境条件が厳しい
コード マップを使用して依存関係をマップする
https://learn.microsoft.com/ja-jp/visualstudio/modeling/map-dependencies-across-your-solutions?view=vs-2022
>コード マップの作成および編集には、Visual Studio Enterprise エディションが必要です。
>ただし、Visual Studio Community および Professional エディションでは、Enterprise エディションで
>生成されたダイアグラムを開くことはできますが、編集することはできません。 .NET 7についての前情報得てるやついる?
どんな感じなんだろ? 質問です。
構造体を使っていて関数内でnewしてそこで使い終わる(ボクシングしない)場合は、stackに乗るだけなので、heapは汚さないしgcには影響無い認識でいいですよね?ゲームを作ってるのでgcの影響を少なくしたいんです。 構造体でもインスタンス生成してる時点でガベージコレクションの対象
.NETでは値型であろうが参照型であろうがすべての変数は監視下に置かれる
ボクシングは値型の変数を参照型(object型)変数に代入する時に一時インスタンスを生成して値をコピーして渡す機能なので全く関係ない話 >>680
> 構造体を使っていて関数内でnew
よくわからんからコードで示して >>680の理解で正しいよ。>>681は間違い。
値型は単なるデータ構造であり、それ自身はGCの管理対象にならない。 ただし、もちろん値型の変数を使ったらその先が全てGCの追跡の対象外になるわけではなくて、値型に定義された参照型の変数はGCの追跡対象となる。
上に述べた通り値型は単なる埋め込みのメモリのデータ構造なので、それ自体は単にGCをバイパスする。
そして、最終的にメモリ上に展開された構造のうちで参照型の変数だけが追跡対象となるわけ。 値型のintでも実際はSystem.Int32構造体のインスタンスではなかったっけ?
MaxValue、MinValueなどのプロパティやToString()などのメソッドが使えたはず
値型の変数でもGCが追跡しているのでは? >>685
構造体のnewは、スタック又はそれを保持する参照型オブジェクト上に事前に確保された領域に対し、コンストラクタをインプレースで実行する
新たなインスタンスを生成している訳ではない >>686
値型に対してObjectクラス又はValueTypeクラスのメソッドを呼び出そうとすると、その時点でボックス化が発生し、ヒープ上に新たなインスタンスが生成される なんか久し振りにここでためになる話を聞けた気がする。
横からだけど、ありがとう。 このスレは前からそんなもんだろ
素人が知ったかして嘘ばかり教えるスレ >>693
この記事では、そもそもなぜ再帰的な定義になっていて、それがどのように機能するかの説明にはなっていないような
C#のintやInt32型の変数は、実際にはどちらもILのプリミティブ型であるint32型にコンパイルされるんだよ
つまりInt32をint32型のフィールド一つだけを持つ構造体として定義してやれば、Int32とint32のメモリ上のレイアウトが同一になる
あとはコンパイラの型チェックを細工して、それらを区別しないようにしてやればよいというわけ >>683
680です!有難う、スッキリしました! TwitterのAPIからツイートを取得し、それを保存する方法について知恵を貸してください
現状テキストファイルに以下のように保存しています
ツイートID||kugiri||ユーザID||kugiri||日付||kugiri||本文||kugiri||未読フラグ||kugiri||保護フラグ
これをString.Splitで配列にしています
問題は||kugiri||とツイートされるとデータが壊れます
実際は||kugiri||ではなくもうちょっと長い記号の羅列ですがどうしても万が一という不安が残ります
こういうデータはXMLで保存するものなのでしょうか
その際「<Honbun>本文</Honbun>」のように保存されると思いますが
「07214545</Honbun>hoge」などXMLのコードが含まれるツイートをされても壊れないものですか?
保存時に本文だけBase64等にするか全てバイナリで保存も考えましたが、ファイルを直接開いて検索したりできないのも不便です
あとは本文をデータの末尾にしてString.Splitを使わずに1つずつ配列に戻すか
データ量は20,000件程度です、他によい方法がありましたらアドバイスおねがいします >>696
その程度のことで人に聞くならプログラムなんかするな
と言いたいところだが
タブで区切れ >>697
ツイッターとか5chとか不特定多数のユーザが書き込みをできるシステムで
タブは絶対にユーザーが埋め込むことができない文字ということですか? 適当なで区切る
データにその記号があればエスケープしておく >>699
例えば|chinko|という区切り文字を使っている場合にユーザーが|chinko|と書き込んだ場合
APIから取得時に|ちんこ|と置き換えておくと言う事ですね、表示するときには|chinko|に戻すと
現状改行コードを置き換えて保存しているので、そこにまとめて組み込めば楽そうです 文字列の改変で(削除でもなく)、エスケープとかサニタイズを独自に実装するのは苦労すると思うよ >>696
もしよろしけば下記について教えてほしい
その上で「JSON形式ではダメな理由」があるなら、それも教えて
1. 「保存」の目的(保存したデータの利用目的)
2. 現状の保存形式を選択した理由 xmlもjsonもエスケープ方法は規格として決められている
オレオレエスケープなんか考えなくても偉い人が作ったものを黙って使えば良い ファイルに保存する際の定石をよく分かってないだけでしょ
JSONやXMLでもいいけど、この場合普通に一つのツリーとして書き出すと追記できなくて不便そうだから、JSON Linesがお勧めだな
Excelなどで表として扱いたいならCSVでもいいがJSON Linesよりはフォーマットにバリエーションがあるから考慮すべきことは多くなる 最近学びはじめてC♯ではメインメソッドを省略できるということで楽だなーと思っていたら関数のオーバーロードのところでエラーが出てしまいました
従来通りクラス名とメインメソッドを書くやり方だと普通に出来たのでローカル関数(オーバーロードできない?)として認識されているためエラーが出てるという認識で合っていますか?
メインメソッドを省略した場合どうやってもオーバーロードできないのでしょうか? >>706
トップレベルに書かれたメソッドはローカル関数になります
cf) //ufcpp.net/study/csharp/misc/miscentrypoint/#top-level-statements >>700
違う、それだと |ちんこ| と書き込んだら |chinko| になっちゃうだろ
|chinko| と書き込まれてたら |エスケープ||chinko| にして、表示する時に |エスケープ||chinko| を |chinko| に戻す
ただこれだと |エスケープ||chinko| って入力されたら |エスケープ| が無くなっちゃうから |エスケープ| 自身もエスケープして |エスケープ| が来たら |エスケープ||エスケープ| にして、表示時に |エスケープ||エスケープ| を |エスケープ| に戻す
※ |エスケープ||chinko| の保存データは |エスケープ||エスケープ||エスケープ||chinko| になる
まあ>>703の言う通りオレオレエスケープは知識としては知っておくべきだけど自前で実装するよりライブラリ等に頼った方がいいと思うよ >>707
ということはオーバーロードを使いたい場合トップステートメントのあとにクラスやら定義してから関数作るか別のファイルで作って呼び出すしかないという認識でいいですか? >>709
それでいいと思います
ただ、そこまで色々するのならトップレベルに書かず普通に書いた方が分かりやすいんじゃないかなという気もしますが >>710
なんかどうなのかな?ってもやもや気になってしまって
教えてくれてありがとうございましたスッキリしました! CSVのreader/writerは標準では無いんだね >>712
readerというかParserはあるよ
TextFieldParserクラス
https://dobon.net/vb/dotnet/file/readcsvfile.html#section7
同じところに載っている独自解析のサンプルや自分でParser作った方が動作は若干早くなるだろうけど ツイートって文字数決まってなかったっけ?
このパターンなら昔は固定長とかも候補になっただろうに
最近の文字コード事情考えると固定長は厳しいよなぁ 拡張性とか無くなるけど
本文の位置をラストにしてcountを渡せば
Split一発で配列に出来るかも 5chのDATのようにHTMLエンコードして改行を<br>で置き換えたものを<>で連結するフォーマットは何気に簡単でいいね ここで出てる案だと普通はタブ区切りがいい
汎用性がある
excelやpythonのpandasでシンプルに読める
VSCodeでアドインもある 馬鹿みたいにHTML解析してデータ取得してるならまだしも普通にapi投げてるならjson一択やろ 初めまして。
.NetCoreでコマンドラインみたいな改行させながらのログ表示をさせようと思ったのですが、どんなコントロール使えば良いのでしょう? 出来れば履歴遡れるようにスクロールバー付きで。
ラベルもテキストボックスもうまく表示してくれない・・・shownイベント以下に書いたからかな。 >>722
画面への表示は何を使ってるの?
WinForms? WPF? それともそれ以外の何か? 同じところで普通に文字列渡したら表示されるなら読み込みに失敗してるのでコントロールのせいではない ただのテキストボックスとかラベルだと
そのとき持ってるテキストしか表示しないから
アペンドしてくしか無いんじゃね? 反応ありがとうございます。
>>723
WinForm使っています。
・・・と、プロジェクト作成時に指定したと思ったのですが、プロジェクのプロパティを確認したら少し違っていました。
Windowsフォームなのは間違いないですが、.NetCoreではなく.Net6.0でした。
.NetとかCoreとかframewaorkとか、まだよく分かっていません。取り敢えず.Netにしとけって感じみたいですが。
WPFはまだ私には早いらしいから避けて通ろうと思います。
>>724
Form.Textは望んだ通りに表示されたのですけどねw
当初 public Form1()の InitializeComponent();以下に記述していたのですが、処理が全部終わってからForm作画に入るのでShownイベントに移動したのですが・・・念を入れて配置した中断ボタンも作画されず穴開き状態で、ShownはFormの配置が終わった直後であって総ての配置が終わった跡ではないって事ですかね。 私が書いたのは読んだファイルを加工して別ファイルに書き出している程度のモノなのですが、普通の処理はどこに置けば良いんでしょうね。 要勉強なり。
#よく分からないまま入門しているから、一つの質問の不明部分を細く要件定義していくと目も当てられない長さになりますね・・・。 >>726
GUIなので実行ボタンでも押した時に処理すればいいんじゃないですかね?
ボタンの配置は気合を入れなくてもツールボックスからマウスでポトペタすると完成ですよ >>729
ボタンスタートと言う方法なら今の実力でも綺麗に収まると思うのですが、D&Dかダブルクリックで起動したら後はノンストップで処理してひっそり終了してもらいたいので、ボタンでワンストップは仕様として煩わしい。
と言う美学的な理由でやろうとしないのでした(^^;
>>725 改めまして。
実装してみました。
TextBox.Text += newword;的な記述をして痛い目を見ました。 TextBox.AppendText(newword);としないといけないんですね。
ついでに初期設定で TextBox.ScrollBars = ScrollBars.Both;でスクロールバーも付けました。
buttonは機能しないのに、TextBoxは問題なく機能していますね。何故だろう。
早くshownからどっかに移動しないとですね。 スタンドアローンなアプリで、アプリの起動をパスワード保護したいのですが、ILSpy等で丸見えにならない程度の強度を持つにはどのような方法がありますか? >>731
パスワードチェックロジックを難読化ツールでぐちゃぐちゃにすると追う気無くなる >>731
適当なアルゴリズムのハッシュ値を比較すれば? >>731
んなもんローカルに全てのデータがある時点で何しても無駄
ILだけ対策すればいいならネイティブコンパイルすればいい
そうすりゃ他のネイティブアプリと同じく機械語になるから >>731
アプリの本体をパスワード付きzipかなんかで圧縮しといて動的にロードする >>739
ダサすぎるし解凍したところでコピーできんじゃん パスワードのみのテキストファイルを
そのパスワードでzip圧縮
解凍成功と中身の照合で実行継続か >>741
実行ファイルをバイナリエディタで開いて照合する箇所を飛ばす命令を書き込めば照合しなくなるぞ >>741
それでいいなら主要なコードを暗号化しといて解凍したコードを動的ロードして実行すれば>>742みたいな攻撃にも耐えられるな ディスクに平文ファイルを書き出したところを盗まれる。
オンメモリでやりたいけどそっちはデータ実行で引っかかるんだよな。 >>743
暗号化する部分とキーが平文だからだめだな まあ>>736の言う通りで
結局現行の高価な商用アプリはほぼシングルユーザーライセンスに移行してるし
今時ネットに繋いでないなんてありえないからKMSみたいに一定期間で認証させるとかだな
実行したらメモリに全部展開されるしそこ覗かれるようならローカルのファイルをいくら細工しても無駄だよ なんか変に面倒な方向にしようとする人たちがいるな
>>731
パスワードを知られたくないだけなら>>734で十分。MD5でもSHA-512でもお好きなもので
パスワード起動部分を突破されたくないなら>>736 >>730
まずWindowsのGUIの基礎を確認した方がいいよ
メッセージループの仕組みやformの作成から表示までにどのイベントがどういう順序で呼ばれるかとか
shownのタイミングで設定が必要な場合もあるけど質問の内容はloadの段階で片がつくんじゃないかね ライセンス認証前提でレスしてる人が多いけど本当にそういう用途なのか?
今どきそんなことするかな? 毎回入力させるのか
次回以降のためにキャッシュでファイルローカルに持たせた場合、どう保存するのか こんな感じで良いんじゃない?
・パスワードが保存されてるか確認
・パスワード入力
・ハッシュ値を比較
・(OK)ログイン/平文パスワードを適当に保存
・(NG)リトライ
次回以降
・保存されたパスワードとハッシュ値を比較
・(OK)ログイン
・(NG)パスワードファイルを消してリトライ
ハッシュ値の生成はレインボーなやつとか総当りとかまでは対策しときたいかなぁ
パスワード検証用によく使われるアルゴリズム使用して、saltでゲタ履かせてストレッチングで処理時間の確保ぐらいはしときたい
バイナリいじるやつまで考えると全然対策にならんけどねぇw osのログインとアプリの起動を同列には考えられんが、linuxも
ディスクを抜き取って /etc/passwd を書き換えられたらアウト。 今どき /etc/passwd にパスワードおいてるディストリビューションってあるの? そこは本質的な話じゃないから適宜shadowにでも読み替えて。 >>756
ハッシュ化するのは平文パスワードを保存しないためなんだが・・・ >>756
今時平文パスワードを保存って発想が出て来るのは不味いぞ >>762
ハッシュ値にこだわるなら、ストレッチングの回数を適当に減らしたハッシュ値を保存→次回以降は減らした回数ストレッチングして検証。でも良いと思うけど、すでにユーザの手元にパスワードがある前提のスタンドアロンアプリだからねぇ
適当なトークンの作成ロジックが隠せない以上平文で良いと思う
平文が嫌なら、毎回パスワードを聞く感じかなぁ ハッキングでもされなきゃローカルに保存したパスワードなんて流出しないやろ ローカルで動作するアプリは、極論言ってしまうと労力惜しまなければどうやってもクラッキング出来てしまうからなぁ
ドングルみたいなハードウェアや、ネットワーク認証挟むとかなり強固にはなるけど
結局のところ、どこまでの強度が必要かって話になる いくら認証を強化しても認証をスキップするよう書き換えられたら終わるんだから気にしないが吉 ユーザーが保存したキーの窃取とアプリのキーの解析を混同してる奴いそう >>731
> ILSpy等で丸見えにならない程度
じゃないのか・・・ その程度を求めてるならネイティブコードにコンパイルすればいいんだって
逆アセンブルで丸見えだけどな
なぜかILだけ逆アセンブルできると思ってるやつ時々いるよな プログラムコードにしか見えない文字列をデータとして格納しておいて、それをキーにする >>772
それが完璧に出来るならコンピュータウィルスの大部分が無くなりそう >>774
パフォーマンスは落ちるだろうし、別に難読化が要らないプログラムの方が多いから
そんなもんオプションでいいだろ >>741
コレ結構好きかも
個別にパスワードを設定したいならかなりお手軽だね >>776
オプションでもいいけどVSに実装してくれ >>772
配布時の検証にはMD5とかよく見るね
動作も制限できそうだけど、その部分を回避されるとやっぱりだめだからなぁ 起動は別ファイルからってやつは
実行前にバイナリ確認してるのかな? zipはパスワード分からなくても中身のファイル名わかれば上書き可能なので
いろいろ工夫しないとめちゃくちゃ簡単に突破されるよ >>772
アプリの電子署名がそれじゃないの?
Windowsだけど >>749 見落としていました。申し訳ございません。
確かに、基礎的な所は全然分かっておりません。
WINDOWS環境では、C+DXライブラリしか経験ないものでして。 あとHSP。
C#の入門サイトでWINの基礎を抑えている所にまだ当たっていないというのもあります。
と言うか、多分その基礎が身に付いたらここで質問せず教える立場だろーなーと思いますw
WINDOWSの基礎からC#のWinFormを入門してコントロールの制御以上に踏み込んでいるサイトがありましたら、紹介よろしくお願いします。
少し報告。
shownイベントが駄目なら、Main()に書き足せば良いんじゃね?とProgram.csを探し出してshownから移植しようとしてみました。
クラスをよく分かっていないのでpublic static void body()とか理解もしていないのにテキトーなキーワードを散りばめてメンバーを書き足したのですが、そこからだとコントロールが一切見えないっぽいので諦めて元に戻しました。
D&Dと単独実行(コマンドライン引数とカレントのファイル検索からのファイル取得)からのノンストップなスムーズ実行を実現したいからbutton以下に収めない記述を探しているのですが・・・まさかチュートリアルが見付からないとか、戸惑っています。 基礎はWebの断片的な情報だと厳しいからでかい図書館や本屋で紙の本でも読んで来い
電子はパラパラめくって中身を確認できないからできれば紙がいい >>782
確かに >>741 のままだとちょっとまずいですね
仕組みがバレてれば、ユーザが任意のパスワードでzipファイル作って簡単に置き換え可能なので
方向性は好きだけど、もうちょっとねる必要ありですね >>786
少し考えてみたけど、ロジックが覗き見れる前提だとこの方法はダメかな...
何やっても置き換えで対応できる気がする 上にも書かれてるけどガチでやられたらどんな方法使っても完全な対策なんて無理だよ まぁ、何を脅威としてみなすか、どこまで許容するかですよね
俺が提案したハッシュ値での検証もアルゴリズムばれ、ハッシュ値ばれまでは大丈夫だけど、書き換えには無力だし
ともあれ、個人的には面白い話題だったわ この質問者の場合は知らんけどユーザーがパスワード入力を許せるくらいの良いソフトを作ってから言えと言いたくなる事例が割とある
まず使ってもらうハードルが高いのに余計なことしなくていいんだよ
気に入ったユーザーは自然と財布が緩むからより便利になる機能をプラグインで販売すりゃいい 高額なソフトを作っている会社はPC内でのチェックが簡単に突破出来てしまう事を判ってるから、
大体Webアクティベーションやドングルを採用してる 上から目線じゃなくて実体験じゃない?
ちなみに俺は実体験としてやらかしたことがあるw
無駄に難読化しようとしたわ なんかこのスレ上から見られてるんじゃないかといつもビクビクしてる妙に卑屈なやついるな
それ多分初心者だから自信がないんじゃなく何年やっても初心者だから自信がないんだぞ
普通初心者なんて三ヶ月で卒業するから学ぶのに精一杯で卑屈になってる暇なんかないわ >まず使ってもらうハードルが高いのに余計なことしなくていいんだよ
このセリフは「良いソフトを作ってから言えと言いたくなる事例」の本人に言ってやれってことだろ。 C#でセキュリティーをなんとかしたいのならUWP使うのも手だけどね >>791
いつもの人だよww
最近は質スレで暴れてたからこっちが平穏だっただけ 人の成果物をタダで使わせろって暴れるキチガイは勘弁してほしいわ 世の中そんなやつばかりだったからこうなったわけで
WindowsでUWP使って小銭は稼げてるかい? 最初は手作り感万歳でも使ってくれる人はいた
今はプロ作ったような紹介画像がないと悲しいことに すみません。
.NET MAUIなのですがページのナビゲーションでパラメーターを渡す処理を作ったのですが、
うまく表示されません。
ブレークポイントを使うと以下のような形になり少しおかしいです。
プロパティSendModelを作成するところでブレークポイントを持ってくるとちゃんと変数が渡されているのに対して
イニシャライズコンポーネントをした後にブレークポイントを持ってくると変数がnullになってしまいます。
なぜこうなるかわかるかたいますか?
https://imgur.com/CNxFyIv.jpg
https://imgur.com/TuctRLK.jpg >>804
今は無いけど任天堂やJRやNHKからちょこちょこあるんじゃね?
あと政府とMicrosoftズブズブだからその辺でなんかありそう とりあえず24年までには置き換えしないといけないしね >>805
先を見据えてって感じかね
もうJavaやりたくないしWeb系は先行者に勝てんし、MAUIに賭けてオラいっちょ勉強してみっぞ >>809
がんばれー
JavaでAndroidやってたらMAUI強いかも
Javaで書いてたAndroidAPIがそのままかけるからね
https://learn.microsoft.com/ja-jp/xamarin/android/ >>803
すみませんこれ自己解決しました
一番最初にイニシャライズコンポーネントが呼び出されてその後プロパティを取得されるみたいです
おかしかったのはxamlのBindingの記述でそのままオブジェクト(SendModel)のプロパティを書いてたからでした
{Binding SendModel.Title}で確認できました >>814
Flutterがいいんじゃない
MAUIに比べりゃ圧倒的に仕事あるよ >>812
C#のスレでFlutterすすめるのは止めなさい
JavaやってるならDartよりC#の方が親和性高いでしょう 仕事として5chで叩くならどのプラットフォームがいい? Dartはchildやchildrenの部分が最高にアホwって思う
https://i.imgur.com/FIRNxLX.png >>815
宣言的にCompositeパターン書くならC#でも似たコードにならんか?
何がアホなんだ? >>816
無駄にCompositeして意味あんの?
.NET MAUIのMVU用ライブラリはFlutter真似して作られてるから無駄にChildrenとかつけちゃうわな
そりゃそうなるわ
.NET MAUI系You Tuberのこの人もこの書き方好きじゃないからMVVMでやりますって言ってるぞ
https://youtu.be/nCNh9G-Q688 >>813
どっちも元々Javaフォロワーでしょ
C#はJavaからの飛躍が大きいからDartの方が覚えること少ないよ >>818
DartはJavaScriptを元にした言語だよ(AltJSとか言われてる)
DartとかJavaScriptを元にしたAltJSがみんな潰れてC#を元にしたTypeScriptがここまで発展したの笑えるよな
FlutterはDartの救済措置でしかない >>817
いやだから何がアホなんだ?誰かが言ってたから? >>821
無駄じゃんその1語
いるか???
コンパイル通すときいるの?
普通に
StackLayout{
Label label1{
Text="ほげ",
TextColor=Red,
TextAttribute=Bold},
Label label2{
Text="ほげ",
TextColor=Red,
TextAttribute=Bold}
}
とかにできなかったのだろうか?
これがスムーズじゃね? >>822
child書くか書かないかってレベルの話かよ… >>823
そりゃそうでしょ…
見にくいしどれがどれかわからんUIの作りづらさは一級品だよねMVU >>803
本当にお前は迷惑で恥知らずなゴミだなMAUI君よお
MAUIの質問ならここじゃなくてMAUIスレに持ち込めよ
Xamarinスレだったのをスレ内で合意を取るようなこともせず勝手にMAUIスレへスレタイを変えて
散々私物化してるのはお前だろ?
そっちのスレで責任もって解決しろよ
なんでわざわざこっちのスレへ持ってくるんだ?
お前が好き勝手やってるせいで答えてくれるようなスレ住民がみんないなくなっちゃったとかそういうことか? あとFlutterもDartもスレ違いだしFlutter叩きならなおスレ違いだ
お前が立ててさんざん自演なりで盛り上げようとしても盛り上がらないクソVSスレでやれ
Flutter VS .NET MAUI VS React Native
https://mevius.5ch.net/test/read.cgi/tech/1661511605/ C#全体のことはここで聞く
MAUI特有のことはMAUIスレで聞く
当然では? すげーな
さすが恥知らずのMAUI君
先にMAUIスレで質問するようなこともせずに
このスレでMAUIの質問をしておきながら
>>828みたいなことを平然と言ってのけるこの神経
でもって826,827みたいな自分にとって都合の悪いことは何一つ見なかったことにしてスルーするんですね?
いやー「.NET MAUI HighSchool」ってコテでしたっけ
この実績で就職活動とか頑張ろうとしてるんですよね
おみそれしました 「.NET MAUI HighSchool」さん、朝から晩までこの板に張り付いて
本日の書き込みランキングのワンツーフィニッシュおめでとうございます!!
http://hissi.org/read.php/tech/20221114/
他のスレでは23時以降も活発に書き込みされてるようですが、
その元気があるようなら私にもお返事いただけませんか? 826とか827とかあと829もそうだけど
でも1点だけ反論して残りの指摘を何一つなかったことにするのはやめてほしいなとは思いますけどね
(ぶっちゃけchildren1つ書くかどうかなんてStoryBoardの地獄に比べたら屁でもないけどまあこれはスレチなんでどうでもいい)
まさか828で反論した直後にこっちのことをNGIDしたからレスが見えてない、なんてしょっぱい言い訳はしませんよね?
それとも貴方自身が恥知らずのゴミムシであることをレスしないことを以て体現しておられるのでしょうか??? >>830
答える必要ないからレスしなかっただけですが???
全レスする必要あります??? >その元気があるようなら私にもお返事いただけませんか? 826とか827とかあと829もそうだけど
って書いてあるよな?
日本語もろくに理解できない馬鹿なのかお前は?
ID:p8dKwuQs0 の書き込みとか
他のスレの書き込みとかを見る限り全レスがデフォみたいなんで
返信がないってことでよっぽど返信したくないことを書かれちゃったのかーと思っちゃったけどそうじゃないんだな?
じゃあ俺の書き込みに限らずすべての指摘に対して逃げずに全レスしろよ
そこまで勿体つけたからにはさぞかしご立派な反論が来るんだろうな?
どうせお前は一日中ずーっと5chするくらいしか能がないんだから好きなだけ時間かけて書き連ねてみろよ
違いはchild/children一個だけみたいな見るほうがリアクションに困る失笑しかできないような返しすんじゃねーぞ
でもさすがにこのスレで続けるのはC#関係ないしスレチで迷惑だから
お前が立てたお前専用のゴミスレ↓
.NET MAUI HighSchool
https://mevius.5ch.net/test/read.cgi/tech/1662947042/
でやれ
よかったな、お前のクソスレに人を呼び込めるぞ
感謝しろ あれれMAUI君どこいっちゃったの?
>>831みたいなファイティングポーズを取ってたからさぞかしご立派な返信が来るかと期待してたのに
このスレにも晒したスレにも何一つ反論できずに尻尾を巻いて逃げ出した?
それともまさか名無しになって他人のフリしてるなんて恥ずかしいことやってる?
このスレもそうだし他のスレ(例えばWPFスレ https://mevius.5ch.net/test/read.cgi/tech/1667010874/ )でも
さんざん「.NET MAUI HighSchool」ってコテを名乗って毎日朝から晩まで書き込んでたのに
急にこのコテ使った書き込みが無くなったみたいなんだけど、どうしちゃったんだろう
うん、なんというか拍子抜けだわ
さよならMAUI君、もう二度とこの板に顔出すようなことをしてくれなければそれでいいや なんだ消えたんじゃなかったのか
とりあえず取って付けたような「つけ忘れただけ」なんて後出しの言い訳乙
で結局直近の833以外のレスは見なかったことにしてまた逃げ出すんでしょ?
さすがMAUI君 てゆうか、実況版に
「.NET MAUIでAndroidでサイン波の出力をした天才プログラマーだけど質問ある?」
なんてタイトルのスレ立てたはいいものの
誰にも相手してもらえなくてレス数1桁で落ちてたけど、このスレ立てたのもMAUI君だよね?
その知識も決して自分のものじゃなくて
この板で1から10まで聞いて回って集めた受け売りの知識だよね??
いやー天才のやることはひと味もふた味も違いすぎて凡人にはその感性が理解できませんわー ほかにも実況板とかVIPとかでいろいろスレ立てても誰にも相手してもらえてないみたいだね
だからって、この板でまでよその板と同じ感覚でクソスレ立ててお山の大将気取ったりするのはどうかと思うよ でもってVIPで建てたスレが多少伸びて反論喰らったら自分ではなにひとつ対処できなくて
この板に泣きついて助けを求めたりもしたよね?
正直すっごく恥ずかしいと思うよ
MAUI君は「別に何一つ恥ずかしいことなんてしてない」みたいなこと言ってたけど、いまでもそう思ってる? >>838
反論食らった?
ここで言われてたけど実際WebViewで実装できてんだからいいじゃんって結果になったんだが? >>839
ねえそんなどうでもいいとこだけしか反応できないの?
「反論」って言葉が気に入らないならじゃあ「的外れな指摘」と言い換えたとして
その的外れな指摘ひとつお前一人じゃ応対できなくてこのスレに泣きついたよね
でもって手取り足取りレクチャしてもらってさ
元のスレでドヤ顔で披露してて恥ずかしくないの?
あと838以外のレスにはなにひとつ言い返せないの?
お前がどんだけ5chに入り浸ってるのかちょっと気になったんで
今年立てたスレの数とか聞いてみてもいいかい? >>840
いや別に恥ずかしくないけど?
分からなかったら人に聞かないの?
だとしたらアホだと思うしこんなスレいらない 質問するときだけコテ外すのはやめれ
応じる人は応じるし、無視したい人は無視する >>841
質問することそれ自体が恥ずかしいことだなんて俺は言ってないし非難もしてないんだが
(もちろん質問することが悪いことだなんて思ってないし、質問で得た知識は有効に生かしてほしいと思ってるが)
どこをどう捻じ曲げて受け取ってそういう認知にいたるのかさっぱり分からんわ
ていうか835,836,837みたいなのにはMAUI君は一言も言い返してこないんだが
おまえ自身も恥ずかしいことだとちゃんと認識してるからなんだよね? >>845
いやお前が知りたい答えがわからないから
何を返してほしいの? 835逃げ出すんでしょ?←どう答えてほしいの?
836受け売りの知識かどうかが知りたいの?なんJでスレ立てたのが俺なのか聞きたいの?
837お山の大将気取ってるのはどうかと思うよ?←これって質問なの? 人間初心者か
このスレC#初心者用であって人間初心者用じゃねえんだよな
保育園通ってろよガキ 最近、未確認飛行というサイトで初めてのプログラムとしてc#を学び始めたんだけど
https://ufcpp.net/study/csharp/oo_construct.html
ここのサンプルというところのプログラムでオーバーライドされたtoString()のメソッドが呼ばれるのってなんでかな?
どこでもそのメソッドを呼ぶようなことをしてないように見えるけど自分で実行してみたら確かに呼ばれてる
すごい基本的な事なんだろうけどどうか教えてほしい Console.WriteLineの中で呼ばれてるんだよ >>850
これで呼ばれてることになってるんだ!?
教えてくれてどうもありがとう
仕組みはまだわからないけれど疑問がとけてすっきりした 例えばこういうこと
public void WriteLine(object obj) {
WriteLine_Inner(obj.ToString());
}
WriteLine_Innerは文字列だけを受け付けて表示するメソッドとする
WriteLineを呼ぶとToStringが呼ばれる >>852
おお、すごい分かりやすい!
ここまで丁寧に教えてくれて本当にありがとう
これで気兼ねなく次の項目に進めるよ 手を動かさない学ばないやつは前に進めない
くだらないことしか言えない
いつまでも同じ場所にいる >>856
まず検索したか?
そのまま「enum使うメリット」でググって納得できなければ使わなければいい
それ以上はここで話してもキリがない >>856
状態などを使うときにmode==0 とか mode==1よりわかりやすい
mode==モード.家でまったり中
mode==モード.お仕事中
など名前がついてるからわかりやすい いやあれだろ
条件が複雑すぎてenumにできないと暴れてたアホ enumってそれが使えるスコープっていう概念もあるのですか? 普通に継承できねぇから
ステータス並べちまうと
クラスを継承したときに
enumも継承して
ステータス増やそうとするけど
enumの継承はできないので
ステータスは定数で並べるしかない
ってだっせー状態になる クラス内でenum宣言することがあると思うのだけど
そうした場合はそのクラス内だけでしかそのenumは使えないんですっけ? >>866
privateならその通り
publicならクラス外でも使える っていう構造にも関わらず
継承できないから
クラスを継承すると
enumで書いてる状態は
全部書き直し
ハイ、全部ちんぽでした! クラス内のクラスって継承で継承できるっけ?
何がともあれメリットがないことにはならないけれども。 他のくだらん機能は
どうでもいいから
enumを継承できるようにしろよ
まあ、なくても
const intで頑張るからいいけど
まあ、その場合enumは一生使わないね 当たり前だろ
クラス階層違うのに同じ名称を押し通す方がやばいわ まあ名称はどうでもいいんだが
クラスAの状態を1〜3でEnumで持ってて
クラスAを継承してクラスBを作った
クラスBの状態1〜5をEnumでもつ
ここで、クラスA用のEnum継承して4〜5を追加して1〜5のEnum作りたい
ということはあるんじゃね enumの継承って、キャストの安全性が保証できなくなるんじゃない? 継承と言うか列挙子の追加やね
確かにたまにやりたいと思うことはある
enum A {A1, A2, A3};
enum B: A {B1, B2};
みたいにできればいいのにね >>875の場合はA型をB型にキャストするのは型安全で逆は非安全だから、通常の継承とは逆になってしまう
TypeScriptみたいに type B = A & enum { B1, B2 } ができるといいんだろうね >>877
> type B = A & enum { B1, B2 }
なにか勘違いしてないか?
type Bは役に立たないぞ >>875
enumB(1〜5)を受け入れるところは当然enumA(1〜3)も受け入れたいわけだが
これを認めると親クラスが子クラスに変換できることになる
>>877
せめてenumからenumへの暗黙変換定義できればなぁ
結局全部再定義して、int(元の数値)介して変換とか
それならもとからintずらずら並べたほうが良いかという >>878
ああ、確かに間違いだな
&じゃなくて|だ な、enumがクソなせいで
クラスの継承までクソになってるだろ
早くenumの継承できるようにしろよ
これができなくてどーすんのよ
って機能な実は >>877,880
だから俺が欲しいのは継承じゃなくて列挙子の追加って言ってるだろ
enum B: A {B1, B2}; だと継承と間違えると言うなら別の構文でもいい
ベースの定義を引き継いで定義できればいい enum継承を実装するならまずはstruct継承を実装しないといけない
そして値型の継承をバンバン行うC++ですらenum継承はサポートされてないから諦めるんだな
とは言え.net standard2以上ならソースジェネレーター使えるんだからC++のマクロ実装よりも堅牢にenum継承を叶えられるのがC# >>887
状態遷移をするものを書いたことないからだろ
書くと一発で不満が出る
仕方なくenumで定義したステータスを
const intに直す作業をすることになる 変性的にどうなんかな?
基底enumを要求するところに派生enum渡して大丈夫? >>888
それ設計大丈夫?
コード上のコンテキストで十分なものまで状態にしちゃってたりしない? >>890
そんなの問題じゃねぇじゃん
適切な状態遷移のクラスを作って
継承するとenum使えないんだから c#のenum周りを作ったやつは
状態遷移も作ったことがない
クソってだけ
まあ、言語開発に状態遷移なんて
いらんだろし
知らないのも無理はない
ってだけの話でしょ 元での状態A,B,C
派生1で状態A,B,C,D
派生2で状態A,B,C,E
派生3で状態A,B,C,D,E
基底に追記するだけで済みそうだけど
わざわざパスタを希望するか まず継承出来る言語を挙げてくれないとどんな設計を求めてるのかわからん >>894
状態遷移作ったことねぇやつは遠慮してくんない? 初心者質問スレでいつまでいきがってんだか
公式にいしゅー投げとけよ >>891
継承したクラスで遷移する状態を拡張するのはいいとして、そこにenumも派生して使おうってのが
設計として間違ってるんじゃね? >>897
そしたら状態はどうやって定義するの?
もちろんenumではない
ステータス用の型が必要っていう意見ならわかる
現状enumしかないってだけ
statetype型なんてできたらそれはそれでよい
enumの拡張だと>>889の問題がヘタクソがたくさんいる職場では問題になりそう 状態推移ってstate machine?
enumでやんの? >>898
enumを派生するんじゃなくて別のenumを使う。 もしかしてHierarchical Finite State Machinesをenumでやろうという話?
ちょっと見た事も聞いた事もないので興味あります >>892
逆にどの言語ならあるんだい?
C++なんてC#で言うところのEnum.GetValuesやEnum.GetNamesすら標準サポート無しだぞ
テンプレート黒魔術使ってコンパイラに超負荷をかけて実装できなくもないが さっきも言ったけどソースジェネレーター利用したらかなりトリッキーなこともコンパイルセーフに行えるんだから騒いでる暇あったら作れば良いのに enumの使い方も知らないやつにソースジェネレータとか無茶言うなよ 状態の管理は >>893 じゃだめなのかな。
自分も昔は継承したがってたけど、結局 893 みたい基底に追記するようになったんだよね。
enum をシリアライズすると int 扱いになるから、複数のクラスで継承して使う場合に、ほかのクラスの enum 定義を把握しておかないと危ないケースがあるような気がするんだけど。 enumはCから受け継いだものだからこの設計についてC#を責めるのがまずアホ
enumの主な使いみちは値を限定することだ
要するにintの値を引数にしたいがその値の種類は3種類に限定したい、それ以外の値を渡そうとしたらコンパイルエラーにしたい、そういう時にenumを使う
その関数は引数として3種類しか渡らないことを保証されてるから無理やり他の値を渡した際には未定義動作になる
enumが継承できてポリモーフィズムが効くとすれば3種類の値しか来ない関数に普通に他の値を渡すことができてしまうだろw
なんでenumを使いたいか知らんけど使い方間違ってるからenumをやめて正しい方法を使え
以上 まだ継承とか言ってるアホが居るのかw
今までのenumの機能だと継承なんてできても意味ない
継承したいたらenumの各値にメソッド定義出来るようにするとかぐらいの機能追加しないとな >>907
でもまさに状態遷移の状態の定義なんてenumの出番だと思うんだけど
ここでこいつ役に立たなかったらほか何に使えるのってぐらい
ちなみにc++でこの辺悩んだことないなぁと思ったら#defineで書いてたわ enum A {A1, A2, A3};があるとして
enum B: A {B1, B2}; としたい理由は何なの?
単に記述量を減らしたいだけ?
AとBは違うデータドメインだから違うenumにするわけなので
enum B: {A1, A2, A3, B1, B2};として新しく定義するか
元のenum Aを拡張するものだと思うけど >>910
なぜそこでenumの出番だと思ったのか
明らかに違うしどこで使うかはたった今説明しただろw
お前の設計はおかしいと何度も言われてるのに頑なに耳をふさいでるからできないんだぞ つか状態遷移で通じると思うところからやめろ
状態遷移の実装なんて何種類もあるわ
最終的に何がしたいのか言葉で説明できないやつは自分のやりたいことをプログラミング言語に直すことすらできんぞ
一般的なステートマシンでいいのか? >>911
例えば標準はenum A {A1, A2, A3};の状態しかないけどオプションつけたらenum B: A {B1, B2};と増える
違うオプションつけたらenum C: A {C1, C2, C3, C4};と増えるとか >>913
enumの話が状態遷移の状態を表すために使ってると分からないなら無理に話しに加わらなくていいぞ >>915
お前の言う状態遷移が何を指してるか言わないならお前の脳内かチラシの裏で処理しとけ
ステートマシンなら普通にインスタンスのパターンマッチングが使えるからそれがわからなきゃ無理してプログラミングの話に加わろうとするなよw 多分switchが数値や文字列にしか使えないと思ってるド素人なんだろ?w switchが使いたいからenumなんだろ?w
おい正直に言ってみろよw デザインパターンのステートマシンは登場しないような気がする >>914
取りうる値すべて網羅するのがenumの存在意義
オプションがついたものが同じデータドメインなら
Aを拡張してenum A {A1, A2, A3, B1, B2, C1, … }とすべきでBやCは不要
異なるデータドメインとして扱いたいなら
enum A: {A1, A2, A3}; enum B: {A1, A2, A3, B1, B2}; enum C: {A1, A2, A3, C1, C2, C3, C4};とすべき
同じ名前のメンバーが存在しても異なる型で別のものだからそれぞれ定義するのは当たり前 typescriptその他の代数的データ型みたいに enum B = .A | B1 | B2 とやりたい気持ちはわかる。 >>921
それを言うならそもそも継承なんか使うなよって思う
まあ、コピペで貼ったほうが将来的に継承よりもうまくいってしまうケースはありまくったのも事実 >>923
TypeScriptでもenumでunion作ったりしないよ
できるけどやらない
やってる人がいるならモデリング方法が間違ってる 状態遷移が何か良くわからずに最近知ったやつが唯一の状態遷移だと思ってるやつに何を言ってもむだだよ
教科書にenumを使えと書いてあったんだろうから ああすまん誤解させた。typescriptのenumを使う話じゃなくてtypeに読み替えてくれ。 >>916
enumの話だと言ってるのに...
お前パターンマッチング言いたいだけだろw 現実のリサイクルにコストが3倍掛かるように
コード継承なんてフレームワーク利用者以外無意味だよ
自分で継承を考えながら書くことなんて時間の無駄でしかない
師匠とおだてられて弟子を育てて行くか、生涯わが道を探求していくかぐらい結果が違ってくる >>921
> Aを拡張してenum A {A1, A2, A3, B1, B2, C1, … }とすべきでBやCは不要
Cしか変えないのに標準やBも再テストが必要になるよね
> 異なるデータドメインとして扱いたいなら
> enum A: {A1, A2, A3}; enum B: {A1, A2, A3, B1, B2}; enum C: {A1, A2, A3, C1, C2, C3, C4};とすべき
まあ君はそうすればいいんじゃね? >>928
enum使うのがおかしいとこれだけ何度も言われてるんだからどれだけボンクラでもそろそろ気づこうなw
お前の読んでる30年前の入門書が古いんだよw >>921
それenum Bで102種類登録しろって話だよな
まあそれが正しいのは分かるが
enum Bは完全にenum Aを内包していて100個は同じ
その状態でenum Aを拡張してenum Bを作りたいってのは間違ってるのか?
それともそういう状況でenumを使うのが間違ってると? >>932
間違ってると何度言われても聞く耳持たないなら聞くのやめたら? 1. enum を継承できないのがおかしい。
2. enum を継承したいのがおかしい。
3. enum を使うのがおかしい。
1. と 3. がそれぞれ1人ずつだと思うのだが。 >>934
enumを継承できるようにすると色々不具合が出るのは既に示した通り
だから継承したいやつがおかしいしできないのは当然
ここでenumを使うのも明らかに悪手でそれは本人も使いにくいと感じてるから薄々はわかってると思う
だけど薄々しかわからないのマジでアスペwww
使いにくい時点で気づこうぜw 3. がお前さんひとりだと言ったつもりだったんだが。 >>936
お前の言いたいことなんか知らんが、もっといい方法があるのに文法に文句を言いながらenumに固執するのはアホだと思わんか?w
おいおいこんな簡単な理屈がわかるやつが俺しかいないってどうなってんのこのスレ?w >>936
相手すんな、最近継承とかパターンマッチング覚えたキッズなんだろ >>938
お前は早くenumの使い方覚えろよw
どう考えてもそこじゃないだろ
使いにくい時点で何か違うなーって思えよw intは小さい数値しか使えないから設計したやつは頭おかしいって発狂してるやついたらアスペかなって思うだろ?
俺から見たお前らってそんな感じになってるぞ
long教えてもらったなら覚えろよw >>937
お前さん一人だけ話がずれているんだと思うぞ。 >>941
ズレてるのはお前の頭だよw
enumを状態遷移に使いたいという話で、継承できないから使えないといつまでも文句言ってるやつに教えてやってるだけだぞw
違う話したいなら気にせずしろよ
ヅラ直してから ステートパターンはポリモーフィズムを実現する方法だけど
ステートマシンは特にポリモーフィズムを実現してなくてもステートマシンになってしまうらしい
むしろポリモーフィズムのメリットがないのに状態遷移させるメリットが全く分からない ステートマシンかどうか聞いても状態遷移知らないのかの一点張りで答えないんだよなあw
いやマジでお前が状態遷移知らないのかとw
せめてその入門書のタイトルくらい書こうやw >enumを状態遷移に使いたいという話で、
状態を表すのに使う話なんだがこのへんがズレてるんだろうな。 >>934
4. 列挙子の追加がしたい
これが入ってくるから、さらにややこしい
こちらは臨機応変かなぁ >>945
だからそこに使うなって話だぞ
何度言えばわかるんだよ?
継承しなきゃ使えないとかいうイミフな条件ついてるのにどう使う気なんだそれ?w >>946
列挙子の追加というのがもともとやりたいことでそれは大前提だと思う。
そこに継承を使うのは無理筋だから他の手でやれということで。 できないことを地面に転がってしたいしたいと泣きわめくのはプログラマーとは言えないな
ツールはそこに揃ってる
なら最適な方法をみつけるのがプログラマーの仕事だ
XY問題でいつまでも時間潰すのはただの無能
↓100回読んどけ
https://ja.wikipedia.org/wiki/XY%E5%95%8F%E9%A1%8C >>984
>>934の1番がこれよね
ID:w1dmgQVP0
4番はこっち
ID:g5bfG+kA0
継承ではなく追加したい、みたいな話
包含に近いか? 状態遷移ってよく知らんけど
必要に迫られるごとに似たようなことはやってるな 複数のテーブル値関数を full outer join すると面白い結果が得られるぞ
C#からは脱線するが。
機会があれば業務適用しようと思ってる >>947
有限状態を表現するのにenumを使うのはごく普通のことでそれに文句つけてるのはお前さんだけだが?
代わりにいったい何を使えと言うんだろう? 状態ごとの派生クラス作ったほうが楽じゃないの
enumを使い回そうってのがまずよくわかんないわ こんな機能があれば便利なのにってのは分からんでも無いけど
他の言語も含めた実装状況見れば少数派がデカい声出してるだけでしょ >>954
何をってもう何度も書いただろw
enumを使うことでうまくいかないのが明白になったなら固執するのがアホ
オブジェクトやクラスはハッシュコード持ってるからenumでなくともswitchで処理できるし継承もできる
状態遷移状態遷移言ってるが教科書コピペするんじゃなく何をどうしたいのかを見据えてそれを実現しなきゃいけないぞw >>935
「継承」できないしするのはおかしいのは分かったから
enumを「拡張」したいって思う
拡張したいって用途にenumを使う
どっちがおかしいって?
その理由が単にenumがそうなってないってなら、そうあるべきだって議論はありえると思うが
>>937
別に俺は固執する気はないので、そういうことはできないってならできないで良いんだが
もっといい方法って具体的には? 例えばステートマシンのノードの一つをカーソルで参照するだけでカレントステートを表現できるしカーソルを動かせばそれはもう状態遷移だろ
ノードをオブジェクトにすれば種類によって違うプロパティやメソッドも持てる
ここにenumの入る余地などない
俺が何を言ってるかわからんとすればお前の勉強不足だから伏して教えを請え enumて要素を限定するためのもんでしょ
拡張できたらぐちゃぐちゃじゃん
拡張した場合また別の名前なり必要で別ものになるでしょ >>961
ぐちゃぐちゃになるかどうかは使い方次第 クラス内でしか意味がないものを他クラスで判断に使う事自体が問題じゃね? ひょっとしてと思って「unity 状態」でググッたら質問者のやりたいことがわかったわw
キャラクタを委譲じゃなく継承させる糞コードでなんちゃってステートパターンしたいんだなw
継承したキャラクタは行動できるパターンが増えるから状態もそれによって増やしたいということだろ
キャラクタを継承させるという糞仕様から直すのが正解だがそれをしたくないならenumじゃなくクラス使えよ
その状態だけ継承させればキャラクタの継承要らないんじゃねというところに気づけばみんなが何を言ってたかわかるようになるかもしれんぞ 継承とか拡張とは違うけど
enum StandardColor: {Red, Green, Blue}
enum ExtendedColor: {Teal, Turquoise}
とあった時にStandardColorとExtendedColorはそれぞれ個別の用途でも使うし
両方混ぜた集合からどちらか一方だけ選択する用途でも使いたいというのは理解できる
この場合はC#では言語的にはまだサポートされてない機能だから
サードパーティのライブラリを使うか自作するか Unityでもポリモーフィズムを実現していればクラスのカプセル化が効くから
Stateで状態が切り替わる振る舞いは同じでもサブクラスで提供される機能を変えられる
ポリモーフィズムの実現が主題であってenumに依存するとかしないとかどうでもいい事な気がする enumはポリモーフィズムに使うものじゃねえんだって話をしてるんだよw 仕様未使用はどうでもいいって言ってるのを何故復唱する必要があるのか? 人生で数々のenumに触れてきて今まで継承したいと思うenumに遭遇したことがない
私は思う
不完全なenumはそれ自体がバグなのだと 多次元配列やジャグ配列で事足りるからenumなんぞいらんでしょ 使うべきところでな
enumの使い方は既に教えた
そこじゃないのも何度も言った
これでわからないボンクラは何やってもだめ 色々混ざってる糖質がいろんな人間が言ったことを勝手に混ぜて
訳の分からない事を言ってるのか? 色んな糖質がバカなことばかり言ってるのに区別する必要あるか?w 見りゃわかるが俺はバカなこと言ったやつをバカにしてるだけだからそれにカチンとくるやつは同じバカだぞ 最初に質問した奴はステートマシンとステートパターンの区別もポリモーフィズムも知らない奴だったわけだが
何でも同じに見えるというならそうなのだろう 知った事ではないし興味すらもない
勝手に吠えてればいい enumだと都合が悪いと質問者すら発狂してるのにいつまでもそれに固執するようなのは同じレベルでしかないだろw
都合が悪いなら使ったらだめと気づこうや stateにenumは使わなくてもStatePatternは作れるし元々enumは必須ですらない
そもそもポリモーフィズムのメリットが分からない奴が面白い勘違いしてるだけだろ ステートパターンを覚えたてのキッズ同士の争いはよそでやってくれw モバイルSuicaにもReactiveUIとか使われてて
結構Rxってもう標準になりつつあるな
これ産み出したC#すごい! >>4
新スレ建てようとしたけど改行が多すぎるとかで無理だった… 立てといた
ふらっと C#,C♯,C#(初心者用) Part157
https://mevius.5ch.net/test/read.cgi/tech/1669349768/
頭のextend~は念のため1行増やしておいた このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 82日 5時間 37分 8秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。