将字符串对象强制转换为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的设计者决定允许您将字符串强制转换为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秒内自己回答这个问题。