ふらっと C#,C♯,C#(初心者用) Part135
■ このスレッドは過去ログ倉庫に格納されています
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part134
http://mevius.5ch.net/test/read.cgi/tech/1511951038/
■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured >>174
スレチだったんですね
ありがとうございました UWPの件をひっくり返してみてみると
その他のプラットフォームのアプリは好きなところを読出し放題なんだよ >>183
whileのタスクの終了待ち?が機能してない
だからタスクより先にi++が行われる可能性があるのでエラーの現象がでてる
IsCompleteってプロパティがあるからそれを使うといいよ そもそも>>122は別スレッドで実行しているだけで非同期実行になってないね
実行するとこんな感じ
https://i.imgur.com/mxuCicn.jpg 既存のXMLを編集したい
編集したタグ以外の要素はテキスト表現を変えたくない
どうしたらいいかな?
コンペア取った時に編集した箇所以外も差分に含まれてしまい困ってる
1回DOMを経由してる以上仕方がないのかもしれないけどなんとかしたい >>188
検証ありがとうございます。
各taskがパラレルに実行されてるから期待どおりです。
IsCompleteにすると当然Serialに実行されるのでやりたい事じゃないです
whileは終了まちではなくdebug用途で足しました。 それは簡単だよ。編集した箇所いがいは差分にでないコンペアをすればいいだけだ。 >>191
そうなのか
それならインデックスの宣言をタスクの外に持ってくだけで希望通りの動作になったのに
パラレルforだと、forのあと重たい処理やってからwaitみたいなことできないから気を付けてな >>193
あ、確かにtaskの外に置くべきでした。
元はindex = iもなしで直接iを参照してたのでってよく考えると危ないことしてました いきなり質問失礼します
スクレイピングで取得した要素を
while (true)
{
var B = driver.FindElementByid(''id1").Text;
var S = driver.FindElementByid(''id2").Text;
Console.WritLine("要素Bは{0} 要素Sは{1}", B, S);
}
でコンソールに表示しています
BとSには常時変化する小数点のある数字が入ります。
この後、
if (B > S)
を実行したいのですが、BもSも文字列として認識されている為出来ません。
数字として認識させる為にはどうすればいいですか? >>197
変換出来ませんと出て行き詰まってます
>>198
単にどちらが大きいか見て
コンソールに大きい方を表示させたいだけです MessageBox.Show("変換できません"); >>196
というか、こんなコードでスクレイピングとかdos攻撃を疑うレベル。
まじて迷惑だからやめて if ((true == double.TryParse(B, out double valueB)) &&
(true == double.TryParse(S, out double valueS)))
{
// valueB と valueSを比較
} >>203
ワイはお前の知性を疑っとるで
余計な事言うとすぐばれんねんバカって >>200
それをする事でどうなりますか?
>>203
始めて1週間なので、
そう思われる理由が分からないので教えてください
>>204
ありがとうございます
試してみます! >>206
どういうコードを書いたせいで動かないのかが分かるんだろ
そうでなければお前は何を解決したくて質問したの? 無駄なメモリの確保を防ぎつつ、フィールドのスコープを限定する方法を教えてください
現在、このようなメソッドを用意して秒間300回程度と頻繁に呼び出しています
void A(){
byte[] data = new byte[1024];
//dataに書き込む処理省略
}
しかし、私の行う用途にでは、呼び出しのたびにdataの配列分確保するのは無駄で、前回の使い回しで十分なんです
dataをメソッドの外で宣言しメモリの確保もすればいいのかもしれませんが、スコープが広がってしまいます(すでに書いてしまったコードがdataという名前のフィールドだらけで収拾がつかなくなっています)
何か手軽に無駄なメモリ確保を防ぐ方法は無いのでしょうか?
よろしくお願いします >>208
VBにはインスタンスと同じ寿命でスコープだけメソッドの変数があるけどC#にはありまへん。
意味があると思えんけど、ラムダ式のキャプチャを利用して、byte[]ではなくFunc(byte[]>のフィールドを持つとか。
まあ、そういう馬鹿馬鹿しいこだわりを捨てて、素直にbyte[]のフィールドを持つのが一番でしょう。 >>196
常時更新ってC#のコードでDOM操作するってこと? >>208
どうせ初心者のうちに書いたコードなんて後で全部捨てて書き直すことになるんだから余計なこと気にしなくてよろしい この間のwin10のアップデートでwebbrowserの挙動に何か変化有りませんでしたか? >>207
変換出来ませんと表示させるコードを書けば、解決策が見つかると言う意味で解釈したらいいですか?
変換出来ませんと表示させるコードを書く理由が分からないので教えてもらえると助かります。 >>211
これがDOM操作と言うのか私には分かりませんが、
ウェブサイトに表示されている、リアルタイムで変化している数字を読み取って比較して表示するという操作がしたいって事です >>208
そのままでもいいなでは?
一応解決法
外で適当な名前でフィールドを確保
static byte[] buffer= new byte[1024];
中でそれを参照
byte[] data=buffer; >>216
そもそも何を使ってスクレイピングしてるかすら書いてないから
みな困惑している
seleniumなんだろうけど >>218
申し訳ない
seleniumでphantomjs driverです 仮にの話だけど
自分でリフレッシュ(再送信要求)してないのに値が変わってるなら
サイトがjavascriptで値を書き換えてるんだろうからDoS攻撃にはなってない >>217
外じゃないと駄目だっけ?
中でよくね? >>205
どう客観的に判断してもおまえの方が頭おかしいだろ >>216
サイバーテロだから基本をマスターするまで止めろ >>204
ちょっとそれるが
> if ((true == double.TryParse(B, out double valueB))
って書く人がたまにいるけどなんで不要な true == をいちいち書くんだろう? >>204
これでいけました
ありがとうございます >>226
英語に不慣れだからかな…
if(cat.IsAnimal==true)
if(true==cat.IsAnimal)
俺は気持ち悪いのでそういう使い方はしない
がnull許容型だと強制されるので非常に不快 日本語で見るとbe動詞が不格好だな
は動物プロパティ
if(猫.は動物)
if(田中誠.は動物) >>228
図書館事件よく読んどけ
逮捕されたくなかったらな。 >>226
本当は分かってるんでしょ?w
人が悪いよ
たぶんデリゲートやラムダ式に拒否反応を示す人の思考回路と同じ。
値って考え方が呑み込めてないんだと思う。 >>233
This is a pen.
これはペンである。
うん、間違ってないな w >>226
設計者が悪い
〜が真の場合〜する
これをコードにするとブーリアンとの比較になる
〜の場合
ならブーリアンとの比較にならない >>226
trueとfalseを=で書く、falseだけ=で書く、falseだけ!で書く
どれでもいいけど!を使いたくないって話はよく聞くな
falseを=で書くならtrueも同じ様に書いた方が見やすいかもね VS2013からVS2017で、
C#のWinForm的には何か大きく変わりましたか?
WPFやUWPやXamarinは使わないです if(a==true) if(a==false) ははっきり言ってダメなやり方
たとえば b!=’1’の結果としてaがあった場合
aには充分な論理的結果が入っているのに
それを比較してる
つまり
if(b != '1')
bが'1'でないならを
if((b !=' 1') == true)
bが’1'でないが真なら としてる
無駄に条件比較の次元が増えてる ってことよ。
言語仕様で保証されてるから
ってもうええやろ >>240
はるか昔に開発終わってるから何も変わってないよ
今のVSでアグレッシブに開発進んでるのってプラットフォームでいえばWeb関係でCoreとかAzure、
VS自体の機能でいえばチームコラボレーション系がメイン
もはや昔ながらのクライアントアプリ開発者には何の恩恵もない代物 あと、日々のマイナーアップデートで平気でC#の言語のバージョンが上がるという、昔のMSからするとありえないことをやってる
プロダクトを自己責任で軽いノリでリリースできるような事業形態の組織なら、
ある日突然新しい構文が使えるようになったりして楽しいからVS2017に移行する価値はあるよw >>237
それも違うというか、まさにそういう考え方をする人が>>226みたいな書き方をするんだと思うw
ifを○○なら××する、みたいな条件判断だと考えると、○○の箇所に比較演算子を書きたくなっちゃう。
(だからBASIC上がりの人はこういうコードを書きたがる)
逆にifなんて実態は機械語のJZ(Jump if Zero)で、要するに単に値を評価して分岐するだけ、
って考えると>>226みたいな書き方見るとなんじゃこりゃって思っちゃう 最近コードの自動生成をよくする
falseのときは書いて
trueのときは書かないとかやってねぇからtrue==は出る
同じノリだろ >>243-244
なるほど、ただのクライアントアプリだけなら関係ないのですね
新しい構文を勝手に使うとたまに怒られるので、止めておきますw bool?使うとtrue==は書かざるをえないんだよね。使いみちは限られるがUWPのx:Bindでbool?使わざるを得なかったりする >>248
bool? は if (x ?? false) の方がスマート >>245
プログラマは考えてはいけない
どんなにおかしなプログラムになっても設計書の通りに書くことが大切
製品の品質より方法論や会社のルールを優先しよう
それがサラリーマンのあるべき姿だよ 戦うサンデープログラマーっていうポッドキャストがあってだな 単純にa==trueって書くときa=trueっていうミスしたときに発見難しいけど
true==aって書くようにしてたらtrue=aってミスしてもコンパイル通らないから見つけやすいよねってだけじゃないの?
昔客先常駐でIT土方してた先輩はそう言ってた >>254
今のIDE使っている人達にしてみたら何を言ってるのかわからん言葉だなw List<int> idata =new List<int> (){1,2,3,4,5,6};
foreach (var dt in idata)
{
dt = 0;
}
dt=0が代入できない。 idata[0]=0;は代入できる。これはどう考えたらいいんだ? >>259
foreachで取ってきた要素はIEnumerator.Currentなので読み取り専用になる できたとしてもそもそもdtは値のコピーなのでセットできてもListの値は書き変わらない List<Label> lbl = new List<Label>() { new Label(), new Label ()};
lbl.Add (new Label() );
foreach(var l in lbl) {
l.Text = "aaaa";
}
これはできるけど。 List<clsint> idata = new List<clsint>();
foreach (var i in idata)
{
i.val = 123;
} class clsint{ public int val;}
これもできるけど。 dtが値型でも参照型でもコピー
参照型はアドレスがコピーされてるので
参照先のオブジェクトの書き換えが有効
値型は値自身がコピーされているので元の値に影響しない これは初心者が勉強したら理解できる内容なので
勉強しなさい 初心者脱出がレベル20だとしたら今のforeachの件はレベル5ぐらい ちゃんとした入門書をちゃんと読んで学習したらレベル10ぐらいは行く 残念だね
ちゃんと本でも読んでコードを書いてたらレベル10に到達するのに
勉強してるつもりになってふらふらしてるからレベル5 >foreachで取ってきた要素はIEnumerator.Currentなので読み取り専用になる
参照型もIenumerator.Currentなのか?
なぜ読み取り専用でもライトできるのか? ここでクダ巻いてないで勉強したらいいのに
自分より出来る人に突っかかってもいいことないのに わかった
ぐちぐちはやめよう
>>263
>>264
この2つともListの中身は変わっていないと言うことはわかるかな? 読み取り専用の参照型の変数は参照は書き換えられないが、その参照を得ればそれが指し示す実体を読み書きできる Listは中に追加された値を保存してる
intとかの値型はその値自身を持ってる
クラスとかの参照型は対象になるクラスへの参照が入ってる
そのListの中にある参照先自体は変わってない
>>273
残念だけどその内容になるほどというとドツボにはまる
classじゃなくてstructにするとフィールドまで書き換えできないと気づく
フィールドに波及しないと言うのは誤った理解 こんなところで怪しい回答に頼るより
しっかりした実績のある入門書に頼ったほうがいいよ
マジで
誰だってその時々で間違うし
本の時代は終わったなんていう奴がいるけど
webだけじゃ網羅的に勉強しづらい いいじゃん誤った理解で
馬鹿は痛い目みないと治らないから
ぜひ痛い目みて貰おうぜ foreach (var dt in idata)
{
dt = dt < min ? min : max < dt ? max : dt;
}
みたいなことができない。これはよくあるケースなので不便。 >しっかりした実績のある入門書に頼ったほうがいいよ
最近2冊ほど読んだけど、細かいところはやってみないとわからないよ。読んだだけでは無理。
なれが必要だ。で慣れるためにコードを書く。しかしサッパリ動かない。w //パラメータをシングルトンで持たせたいのだが、Jsonで格納しようとするとstaticにできない。なので
referenceを返したいのだが、何かいい方法はない?
class Singleton
{
private Singleton(){}
public static Singleton getInstace() {
return SingletonHolder.INSTANCE;
}
private static class SingletonHolder {
public static Singleton INSTANCE = new Singleton();
}
}
たとえば教科書にあるシングルトン。これに
class clsGrovalParam
{
public int value1;
public int value2;
public int value3;
}
public clsGrovalParam Param;
とやってParamを追加していたが、なんか動作がおかしい。W
と思ったらPublicにしていたので直接Paramを生成していてシングルトンになってなかった。
.Param
こいつをStaticにできればいいのだが、Jsonで格納するときにスタティックにすると格納できない。 ■ このスレッドは過去ログ倉庫に格納されています