テーブルにchar型の列があります。C#でcharに変換したい。それはによって働いています
char gender = Convert.ToChar(dataRow["Gender"]);
しかし失敗しました
char gender = (char)(dataRow["Gender"]);
列がint型の場合。(int)を使用してオブジェクトをキャストできます。なぜchar(例外)で失敗したのですか?
InValidCastException。
ありがとう、
テーブルにchar型の列があります。C#でcharに変換したい。それはによって働いています
char gender = Convert.ToChar(dataRow["Gender"]);
しかし失敗しました
char gender = (char)(dataRow["Gender"]);
列がint型の場合。(int)を使用してオブジェクトをキャストできます。なぜchar(例外)で失敗したのですか?
InValidCastException。
ありがとう、
はdatarow[column]
タイプ'object'の式です
このConvert.ToChar()
メソッドには、引数としてオブジェクトを受け取るオーバーロードがあるため、コンパイラーは何をすべきかを知っています。
はchar型への(char)dataRow[column]
明示的なキャストですdataRow[column]
が、オブジェクトからcharへの自動変換は存在しません
Convert.ToChar
テキスト値「A」を読み取り、値「A」の文字オブジェクトに変換します。
キャストでは、元の値が文字オブジェクトであると想定されます。エラーはそうではないことを示しています。
どうやら値dataRow["Gender"])
が含まれていint
ます。これは、それが「ボックス化された」int(オブジェクトとして格納された「int」)であることを意味します。これは「実際の」intにのみキャストでき、。などの他の何かに直接変換することはできませんchar
。
ただし、2段階のアプローチを使用できます。
char gender = (char)(int)dataRow["Gender"];
int
roを本物のroにキャストしますchar
ます。が実際に(強く型付けされた)文字列である場合dataRow["Gender"]
は、次を使用できます
char g = dataRow["Gender"][0];
その文字列の0番目の文字を取得します(文字列がnull
空の場合は失敗します)。一方、dataRow["Gender"]
が文字列であるが、と入力されているSystem.Object
場合は、次を使用できます。
char g = ((string)dataRow["Gender"])[0];
ほとんどの場合、セルの実際の値はタイプです。この場合、を取得します。object
InvalidCastException
Convert.ToCharは、代わりに、型を受け入れるオーバーロードがあるために機能しますobject
。