質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

7478閲覧

if文で行ごとに比較させて判別させたいのですが、

lable

総合スコア14

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2018/07/13 07:27

編集2018/07/13 07:35

前提・実現したいこと

c#にてif文を使って行ごとに列を比較して判別させるような仕組みを作っているのですが、どうもうまくいきません。
ご教示お願いします。

発生している問題・エラーメッセージ

エラーメッセージは出ていません。 5行目に”要修正”しかでてこない、 これは1行目が”要修正”に値するものだったからだと思われる。 if (dataGridView1[2,i].Value == dataGridView1[2,i].Value) と書き換えれば、5行目は全て”OK”だった。

該当のソースコード

C#

1for (int i = 0; i < files_1.Count();i++ ) 2 { 3 if (dataGridView1[2,i].Value == dataGridView1[3,i].Value) 4 { 5 dataGridView1[4,i].Value = "OK"; 6 } 7 else 8 { 9 dataGridView1[4,i].Value = "要修正"; 10 } 11 }

試したこと

if文のところをif(files_1.ElementAt(i).ToString()==files_2.ElementAt(i).ToString())としてみてもダメでした。
valueのところをToString()にしてもダメでした。

補足情報(FW/ツールのバージョンなど)

3列目と4列目は共にDateTimeが入っています。
file_1は配列変数です。string型が入っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2018/07/13 07:37

具体的にどのような値を比較しているのか示してください。
lable

2018/07/13 07:42

すみません。補足情報にDateTimeと書いていれば大丈夫かと思っていました。具体的には日時が入っています。
sh_akira

2018/07/13 07:54

"本当に"値は同じですか? "OK"の所にブレークポイント打って中身見てください
lable

2018/07/13 08:03

今確認してきましたが、同じ値を入れてもやはりelseに行ってしまいます。
macaron_xxx

2018/07/13 08:03

"OK"がでないので、"OK"にブレークポイントを打ってもダメですね。"要修正"のところでみるべきです。また、解決しない場合には、その値を追加情報として追記してください。
sh_akira

2018/07/13 08:06

ごめんなさい指示を間違えました。ですが聞きたいのはそうではなく、"同じ値を入れても"の方法がこちらには分からないので、同じ値じゃないんだろうという事しか分かりません。同じ値ならOKがでるので。
lable

2018/07/13 08:08

値は”2018/03/06 9:23:23”を入れています。あとこれはファイルのタイムスタンプから抽出しています。
sh_akira

2018/07/13 08:09

具体的には、CSVから変換してDateTimeだと思い込んでいるだけでStringのままで、最後にスペースがついていたり付いていなかったりしている可能性があったりします。このコードだけみても、データが同じじゃないからOKが出ないとしか言いようがないという事です。
lable

2018/07/13 08:15

正確に言うとだめなのだと思いますが、このプログラムに関しては、StringであろうとDateTimeであろうと値がまったく同じであるか否かを知りたいのですが。片方だけが違うデータになっている可能性があるということでしょうか?
sh_akira

2018/07/13 08:18

dataGridView1[2,i].Value.ToString() == dataGridView1[3,i].Value.ToString() でOKになれば同じです。(DateTimeのToStringはフォーマットがあるので注意)
guest

回答2

0

ベストアンサー

csharp

1for (int i = 0; i < files_1.Count();i++ ) 2{ 3 var value1 = dataGridView1[2,i].Value.ToString(); 4 var value2 = dataGridView1[3,i].Value.ToString(); 5 if (value1 == value2) //ここにブレークポイント打って、value1とvalue2を見てください。 6 { 7 dataGridView1[4,i].Value = "OK"; 8 } 9 else 10 { 11 dataGridView1[4,i].Value = "要修正"; 12 } 13}

投稿2018/07/13 08:20

sh_akira

総合スコア380

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lable

2018/07/13 08:29

sh_akiraさん、ありがとうございました。 上記の方法で正確に判別することができました。 hihijijiさんがおっしゃっていたようにObject型を一旦キャストしなくちゃいけなかったんですね。助かりました。
guest

0

dataGridView1[2,i].Value はObject型です。
C#ではObject型の比較はとてもややこしいルールがあるので、通常は元の型にキャストしてから比較します。

投稿2018/07/13 08:05

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lable

2018/07/13 08:30

正しい指摘ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問