将字符串对象强制转换为SqlString时出现异常
本文关键字:SqlString 异常 转换 字符串 对象 | 更新日期: 2023-09-27 18:21:29
我在下面的简单c#方法中遇到了一个简单的强制转换问题
using System;
using System.Data.SqlTypes;
...
private void method1() {
string s = "TestString";
object o = s;
SqlString t1 = (SqlString) s;
SqlString t2 = (SqlString) o;
}
...
当直接从s
进行转换时(在t1的情况下),我没有得到任何错误,但当从o
进行转换时,我得到异常:
指定的强制转换无效。
我在从object
转换为所有类型的System.Data.SqlTypes
时遇到了同样的问题
如何将包含字符串的object
强制转换为SqlString
?
这是因为存在字符串到SqlString的隐式转换运算符。
换句话说,您不是在处理一个简单的内置强制转换:SqlString的设计者决定允许您将字符串强制转换为SqlString。他们没有为Object做这件事,因此出现了您所看到的错误。
回答您的问题
private void method1() {
object o = "MyString";
SqlString t1 = o as String
}
如果o不是字符串,t1将为null。
其他两个答案都没有解决将对象引用强制转换为SqlString的问题。如果您确信对象引用指向字符串,那么很简单:
var ss = (SqlString)(string)o;
如果o可能持有字符串以外的值,您可以这样做,而不是:
var ss = (SqlString)(o as string);
或者,如果你想走以字符串格式存储非字符串数据的(危险的)道路:
var ss = o == null ? (SqlString)null : o.ToString();
好吧,你可以这样做:var x = new SqlString("hi mom")
或者,如您提供的示例所示:
string s = "TestString";
object o = s;
SqlString t1 = new SqlString((string)o);
一般建议:如果你在StackOverflow上发帖之前学会使用Intellisense和MSDN文档,你的生活可能会轻松得多。您可以使用文档在大约5秒内自己回答这个问题。