ふらっと 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 >他のスレッドでは書き込めないような低レベルな質問、
public class cdata
{
public double Ampea ;
public double Volt ;
public double Temp ;
public double Activity ;
public double Flow ;
}
cdata cdt;
double[] ddt;
cdt.Temp をddt[2]としても扱いたいのだが、どういうように定義したらいい? >>5
それは知ってるけど、結局定着してないでしょ
インデクサって表記されることが多かったような気がしたけど、記憶違いか 知ってたら>>3みたいなこと言わないと思うが...
まあ定着とか言ってるぐらいだからちゃんと理解してないんだろうな >>2
cdataをstructに変えた上で、
cdata cdt;
double* ddt = &cdt;
ddt[2] = 100;
もしくは、FieldOffset(0)で fixed double[5] をcdtのフィールドに定義する まあ、でも、言語がそういう仕様になってないのにそんな書き方するな
ってのは一言言っておきたいね >>7
しょうもないことで絡む奴。アホか
君がべき論と現実の区別がつかないだけ。
例えば政府の勧告に従えば破綻は「破たん」と書かなければならないが、
現実には新聞とTVの字幕以外のほとんどのメディアでは相変わらず破綻と表記される。
>>5も同じこと これはたぶん政府じゃなくて日経あたりが震源地だろうけど、
「ファストフード」表記のごり押しも結局定着しなかったね >>10
>>5のリンク先読んでないのか?
それとも理解できないのか?
MSの社内ルールの話だから世間で定着してるかどうかとは関係なくMSの公式ドキュメントでは伸ばすって話な >>13
アホだねえ
だからそのMSのルールは政府の勧告に従ったもの。
Vistaが出る時にそういう触れ込みだったでしょ だいたい、インデクサなんて一般的じゃない用語がどう発音されるかなんて
その業界次第だ しかし、人を無知だと思い込まないと死ぬ病の奴、
いちいち他人に絡まないと死ぬ病の奴って何なの
こっちが>>5みたいな動きがあったことを意地でも知らなかったと思いたいらしいけど、
むしろ知ってるから>>3みたいな疑問が出てくるんであって、
知らなきゃよくあるカタカナ用語の表記の揺れかなで終わり。 >>14-16
政府からの圧力があったのか世間の動向を見たのかは知らんがMSが社内ルールを改訂したと言う事実は変わらない
その事実を知ってて>>3みたいな疑問を持つとかどんだけ理解力がないんだよ w 一時活字関係の業界で、文字を沢山詰め込むためにーで終わるカタカナ語の最後を切るのが流行ったのさ
その名残で伸ばさない人の勢力が弱まったのかね? 俺はお前らのためにランダムで「ー」を
付けたり付けなかったりするよ
たまに「-」だったり「―」だったり
「一」だったりもしてみるよ 活字業界?
単にJISでそう決まってただけやで... まあ>>18の言う通りキチガイに触った奴が負けって言われりゃ返す言葉はないけど... w DirectXや他のフレームワークを使わずに
VSYNCを待つ方法があったら教えてください >>26
無いと思うけど
IDXGIOutput::WaitForVBlankが嫌な理由は? enum enDispNum { min = 2, max = 5 };
int[] dispno = new int[] {(int)enDispNum.min , (int)enDispNum.max }; //エラー
int[] dispno = new int[] {2,5}; //OK
int aa = (int)enDispNum.max; //OK
enumの挙動がわからん。なんで? enum enDispNum {dumy, min = 2, max = 5 };
ダミーいれたら動いた。w 笑かす。 enum enDispNum:int {dumy, min = 2, max = 5 };
宣言で int 明示してもcastしないとエラーする。 Dumyがないとエラーするし
キャストしないと駄目だし、なんか使いにくいな。 >30
エラー 1 型 'elRemoteControl.enDispNum' を 'int' に暗黙的に変換できません。
明示的な変換が存在します。(cast が不足していないかどうかを確認してください) >30
同じように2,5で数値していをしてごらん。きっと笑えると思う。
dumyがなくても min=0なら動作するんだろう。おそらく。
例文みたらどれもこれも、数値していがないか、0は一つある。この場合は
dumy=0が暗黙定義されると見た。 >>32
これはどうでしょう?
int[] dispno = new int[] {(int)(enDispNum.min) , (int)(enDispNum.max) }; VS2010でもVS2013でもVS2017でも再現しない
https://ideone.com/glor7T
ideoneでも再現しない そうか。再現する物もあれば、しないものもある。()でくくるといけるものもある。
しかしenumを使う時は
1. dummyを入れる。
2.宣言でキャストしても 個別に必ずキャストすること。
というのを守った方がいいかも。 なんでそうなるw
確実の君が何か変な勘違いしてるだけだってww 「dummy を入れたらコンパイルエラーが止まる。正常にコンパイルされて
動作も正常に動作する。」
この理由を説明してごらんよ。
dummyを入れる以外にはなにも変更していない。 やっぱ想像したとおりだ。min=0にしたら
enum enDispNum:int {min = 0, max = 5 };
これなら
int[] dispno = new int[] {(int)enDispNum.min , (int)enDispNum.max }; //OK
これでもOKだ。コンパイルエラーしない。 まあ特殊なコンパイラ使っててそれがバグってるんだろう
とりあえず.NET Framework向けのMS製csc.exeは
> エラー 1 型 'elRemoteControl.enDispNum' を 'int' に暗黙的に変換できません。
このエラーが出た場合「エラー 1」じゃなくて「error CS0266」って出すし VS2013(Pro)だよ。Update5 .NETは4.7
因みにエラー1は一覧の番号だろ。一覧をコピペしただけだから。最初のエラーって意味だ。
2番目のエラーはない。 どういう意味、VSで別のコンパイラーを動かすってこと? そんな高度なこと知りません。
標準のWindowsFormアプリケーションだよ。 List<List<Label>> ccValueSetLabel = new List<List<Label>>();
private void DataRefresh(List<List<double>> datasc)
{
int colcount = 0;
foreach (var dev in ccValueSetLabel)
{
var datas = datasc[colcount++];
List<string> strdt = new List<string> ();
int count=0;
par.GetInstance().ElDataList.ForEach(x => strdt.Add(string_format(x.format, datas[count++])));
count = 0; dev.ForEach(x => x.Text = strdt[count++]);
}
}
こういう場合に折角foreachを使っているのに、countを使うのはなんだかなーと思う。foreachを2重かするとか
addみたいにドンドンgetできる方法ってないの? もうEnumはいいよ。原因はわかったし、そんなものだろ。 エラー 1 型 'elRemoteControl.enDispNum' を 'int' に暗黙的に変換できません。
明示的な変換が存在します。(cast が不足していないかどうかを確認してください)
これだよ。だから41が言ってたerror番号だよ。エラー一覧をコピペしたけど
出力一覧の方にはエラー番号がでてた。 こちらでは再現しないので、そのエラーが本当に出ると信じられない
本当なら今後のために原因をきちんと把握しておきたいので、とりあえず件のコードとエラーのスクリーンショットを提示してほしい 一寸聞きたいんだがキャストをかませないとエラーする件もそちらでは、出てないの?
キャストなしでも動く? とすると俺のpCがおかしいな。
でもキャストがいるとかDumyがいるとかだとやっぱり笑ってこらえる不具合含みでしょ。
俺のPCはDELLのディスクトップだからそこそこ早いやつだよ。(ゲーム用じゃないけど) 意地悪だなあw
こんなの確認するまでもないでしょ
まず間違いなく、この質問者さんは、問題に遭遇したのとは
別のコードをここに書いてる。
要するに、彼の問題の原因は彼が思い込んでいるのとは別のところにある。
こんなところに書き込んでる時間があるなら
その間に彼の仮設を検証する最小限のコードを書いて確認すりゃいいのにと思うんだけど、
なぜかそれをしないんだよねこういうあわてんぼうさんは。 列挙型を数値型に代入するには明示的なキャストが必要なのは言語仕様
int[]の初期化子で全部intへ明示的にキャストしてるのにエラーが出るのはおかしい
まあそんなgdgdはいいからスクリーンショットはよ 別な何かを int にキャストしようとしてるんでないの? enum enDispNum { min = 2, max = 5 };
int[] dispno = new int[] {(int)enDispNum.min , (int)enDispNum.max }; //エラー
int[] dispno = new int[] {(int)(enDispNum.min) , (int)(enDispNum.max) }; //OK
int[] dispno = new int[] {(enDispNum.min) , (enDispNum.max) }; //エラー
int[] dispno = new int[] {enDispNum.min , enDispNum.max }; //エラー
int[] dispno = new int[] {2,5}; //OK
int aa = (int)enDispNum.max; //OK
enum enDispNum { min = 0, max = 5 };
int[] dispno = new int[] {(int)enDispNum.min , (int)enDispNum.max }; //OK
int[] dispno = new int[] {(int)(enDispNum.min) , (int)(enDispNum.max) }; //OK
int[] dispno = new int[] {(enDispNum.min) , (enDispNum.max) }; //エラー
int[] dispno = new int[] {enDispNum.min , enDispNum.max }; //エラー
enum enDispNum { dummy, min = 2, max = 5 }; これもmin=0にするのと同じ
(int)キャストなしは全部エラー 上の状況は明示的に enum xxx:int{} やっても同じ。
enumで午前中潰してウンザリ。 https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/enum
この列挙型では、要素の並びは 1 からではなく、 0から開始します。 ただし、列挙型には
値が 0 となる定数を含めておくことをお勧めします。 詳細については、列挙型を参照してください。 idやワッチョイ隠す人は相手にしない方がいい
>>56
上のEnumの場合enDispNumのメンバーが数値だと推論できないんだろうな
理由は多分自分で貼った>>58
enDispNum.minなどのくくりにすると数値が定義済みだからキャストできる
キャストする対象をきちんとかっこで括らないとだめ >>45
ソース汚すぎて何がしたいのか意味がわからん
道具に文句言う前にまずはリーダブルコードでも読んで自分のセンスを何とかしたらどうだ >>62
全然理由になってないw
っていうか、質問者が言ってる現象が本当に再現できるか、自分で試してみました?w
あと、キャスト演算子の優先順位はドット演算子より高いはずなので、
キャスト演算子の後を()で括るかどうかで式の値は変わらないはず。
要するに、>>56はデタラメw あれ、逆書いてるw
× キャスト演算子の優先順位はドット演算子より高いはずなので、
○ ドット演算子の優先順位はキャスト演算子より高いはずなので、 その前にvs2013で.net 4.7ってサポートしてるのか? >>67
Developer pack入れたらおーけー 今のところ質問者以外の環境では誰も再現してないのは
環境が違うからか? こんな変な挙動になる環境って言うのも考えにくいので、質問者が壮大に勘違いしてるか単なるネタの疑念が拭いきれない
ソースとエラーになってる画面のスクショがででくるまでは傍観するわ 色々想像できる名前が入ってるからスクリーンショットはだめだな。それにスクリーンショットみても
何も変わらんよ。エラーが一行でてるだけだから。
そもそもEnumて数値を設定して使わないから気が付かないだけだろ。それにもう
今月一杯で2013はやめて2017に変更するし。 List<string> strdt = new List<string> ();
〜
count = 0; dev.ForEach(x => x.Text = strdt[count++]);
この部分は
dev.Zip(strdt,(x,y) => x.Text = y);
これで動くと思ったが動作しないがなぜ? Zipに与えられたラムダ式は遅延実行されるから。
ZipしてからForEachしようぜ devとstrdtをマージしたものにForEach 正規表現を使って文字列から、○○月を除くコードを教えてください。
○には、1から12までが入ります。 using System.Text.RegularExpressions;
var text = "dejdo8月dksk12月diwk";
text = Regex.Replace(text, @"\d+月", ""); using System.Text.RegularExpressions;
var monthPattern = new Regex(@"(\d+)月([^火水木金土日])");
var monthRemover = new MatchEvaluator(mc => Enumerable.Range(1, 12).Contains(int.Parse(mc.Groups[1].Value)) ? mc.Groups[2].Value : mc.Value);
var inputText = "kok3月rq12月12461123456789月火水木金土";
var monthRemovedText = monthRegex.Replace(inputText, monthRemover); 普通に正規表現使えばいいのに…
[1-9]とか|とか1[0-2]とか >>85
細かいけど、リーディングゼロとか、ゼロ以外の数が前にくっついてた場合
どう処理すべきかはっきりした方がいいかも >>78-87
アドバイスありがとうございます。
やってみます。 var list_hoge = new List<Data_hoge>() {
new Data_hoge(){Key="1",Value=22 ,Flag=true},
new Data_hoge(){Key="2",Value=23 ,Flag=true},
new Data_hoge(){Key="3",Value=24 ,Flag=false},
new Data_hoge(){Key="4",Value=23 ,Flag=true},
};
この様なデータがあったときKeyに相当する引数(int=1〜4)を入れると
Flagがtrueのものの中でvalueが最大値を取るならtrueを返すメソッドを作りたいのですが
どうすればいいでしょうか?
LINQだと嬉しいです public bool saidaichidesu(int x)
{
var list_hoge = new List<Data_hoge>() {
new Data_hoge(){Key="1",Value=22 ,Flag=true},
new Data_hoge(){Key="2",Value=23 ,Flag=true},
new Data_hoge(){Key="3",Value=24 ,Flag=false},
new Data_hoge(){Key="4",Value=23 ,Flag=true},
};
var flaggedList_hoge = list_hoge.Where(data => data.Flag);
if (flaggedList_hoge.Count() > 0)
{
var maxValue = flaggedList_hoge.Max(data => data.Value);
この先どう書けばいいかわからない
}
return false;
} 最大値を持つ要素の中でKeyがxと一致するものを返したいということ? 最大値をもっているもののkey(複数あり)がxと一致するかどうかを確認して、一致するならtrueを返したいです
keyがstringになっていますがこれをintにしても構いません 寧ろ多くの人は解らんと思うが、、、先ずは質問の意味が正確に解るかどうかだな。
それが最大の問題だ。
「質問はすでにその中に解を含んでいる」、質問者が質問を正確に組み立てられないのは質問者の
責任として放置される性質のものではなくて、回答者の技量によって正確な質問に
組み立て直す。これは頭のいい回答者の責任になる。
でその役割りが君というわけだ。 saidaichidesu(1) −−> False
saidaichidesu(2) −−> true
saidaichidesu(3) −−> false
saidaichidesu(4) −−> true
saidaichidesu(その他) −−> false
上の例ではこういうリターンを期待してる? もしこうであれば簡単だよ。 class Data_hoge{
public string Key;
public int Value;
public bool Flag;
}
public bool saidaichidesu(int x)
{
List<Data_hoge> list_hoge = new List<Data_hoge>() {
new Data_hoge(){Key="1",Value=22 ,Flag=true},
new Data_hoge(){Key="2",Value=23 ,Flag=true},
new Data_hoge(){Key="3",Value=24 ,Flag=false},
new Data_hoge(){Key="4",Value=23 ,Flag=true}
};
var maxv = list_hoge.Where(dt => dt.Flag).ToList().Max(dt => dt.Value );
var res = list_hoge.Where(dt => dt.Value == maxv).ToList();
foreach (var dt in res)
{
if (x == int.Parse(dt.Key))
return true;
}
return false;
} 苦戦した。w 一行では難しいな。もっといい方法があると思う。 ■ このスレッドは過去ログ倉庫に格納されています