C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■87387 / 1階層)  キャストのエラー
□投稿者/ 魔界の仮面弁士 (1671回)-(2018/05/16(Wed) 17:42:37)
2018/05/17(Thu) 10:29:11 編集(投稿者)

No87385 (Ponta さん) に返信
> for (int i = 0; i < ds.Tables["TableA"].Rows.Count; i++)
ここは TableB で無いようですが、あえてそうしているのでしょうか。

TableA と TableB の関係次第ではあるのですが、ループ内では
TableA を見ておらず、むしろ
TableB の行差分を取っているように見えたので、
 i < ds.Tables["TableB"].Rows.Count - 1
といった継続条件になるのではないか、と思ってみたり。


> 現状はobject型(中は整数値)からint型にキャストしています。
その整数値は int ですか。それとも long とか short だったりしますか?
string 値ということは無いですよね?

念のため、ds.Tables["TableB"].Columns[0].DataType を確認しておいた方が良いかと。


> キャストの仕方が間違っているのか、そもそもキャストだとできないのかわかりません。
ボックス化解除するためには、object 内のデータの型を正しく把握している必要があります。

int intValue = 10;
long longValue = 10L;
short shortValue = 10;
string stringValue = "10";

object oInt = intValue;
object oLong = longValue;
object oShort = shortValue;
object oString = stringValue;

Console.WriteLine((int)oInt); // OK
// Console.WriteLine((int)oLong); // InvalidCastException
// Console.WriteLine((int)oShort); // InvalidCastException
// Console.WriteLine((int)oString); // InvalidCastException
Console.WriteLine((int)(long)oLong); // OK
Console.WriteLine((int)(short)oShort); // OK
Console.WriteLine(int.Parse((string)oString)); // OK



> var data2 = new DataPoint();
> data2.SetValueXY(ds.Tables["TableB"].Columns[0], (int)ds.Tables["TableB"].Rows[i+1][0]-(int)ds.Tables["TableB"].Rows[i][0]);   ←ここでエラー

DataPoint クラスの
public void SetValueXY(object xValue, params object[] yValue)
というメソッドを呼び出しているようですが、ここで
第一引数 xValue に対して、System.Data.DataColumn を渡していますよね。

SetValueXY の第一引数には、データポイントの X 値を渡すべきなのでは?
https://referencesource.microsoft.com/#System.Windows.Forms.DataVisualization/Common/DataManager/DataPoint.cs,2086
https://referencesource.microsoft.com/#System.Windows.Forms.DataVisualization/Common/DataManager/DataSeries.cs,a83419cfea834cf1,references

上記の実装を見る限りでは、第一引数のデータ型は、
数値や文字列が求められているように見受けられます。

…と思ったんですが、こっちは私の勘違いでした。
var data2 = new DataPoint();
data2.SetValueXY(xValue, yValue);
の場合は、xValue が DataColumn でもいけますね。

もしもこれが、
chart1.Series[a].Points[b].SetValueXY(xValue, yValue);
の場合は、xValue が DataColumn だとエラーになりますが。
編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←キャストのエラー /Ponta →Re[2]: キャストのエラー /Ponta
 
上記関連ツリー

キャストのエラー / Ponta (18/05/16(Wed) 17:15) #87385
Re[1]: キャストのエラー / WebSurfer (18/05/16(Wed) 17:28) #87386
キャストのエラー / 魔界の仮面弁士 (18/05/16(Wed) 17:42) #87387 ←Now
│└ Re[2]: キャストのエラー / Ponta (18/05/17(Thu) 13:30) #87394 解決済み
Re[1]: キャストのエラー / furu (18/05/17(Thu) 09:52) #87390

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信