C# 将字符串对象强制转换为SqlString时出现异常

C# 将字符串对象强制转换为SqlString时出现异常,c#,types,casting,C#,Types,Casting,在下面的简单c#方法中,我有一个简单的cast问题 当直接从s(在t1的情况下)进行强制转换时,我没有得到任何错误,但当从o进行强制转换时,我得到异常: 指定的强制转换无效 从object转换到所有类型System.Data.SqlTypes 如何将包含字符串的对象强制转换为SqlString?可以这样做:var x=newsqlstring(“hi-mom”) 或者,如您提供的示例所示: string s = "TestString"; object o = s; SqlString t1

在下面的简单c#方法中,我有一个简单的cast问题

当直接从
s
(在t1的情况下)进行强制转换时,我没有得到任何错误,但当从
o
进行强制转换时,我得到异常:

指定的强制转换无效

object
转换到所有类型
System.Data.SqlTypes


如何将包含字符串的
对象强制转换为
SqlString

可以这样做:
var x=newsqlstring(“hi-mom”)

或者,如您提供的示例所示:

string s = "TestString"; 
object o = s; 
SqlString t1 = new SqlString((string)o);  

一句忠告:如果你在StackOverflow上发布之前学会使用Intellisense和MSDN文档,你的生活可能会轻松得多。您可以使用文档在大约5秒钟内自己回答这个问题。

这是因为存在一个问题


换句话说,您没有处理简单的内置转换:SqlString的设计者决定允许您将字符串转换为SqlString。他们没有为对象执行此操作,因此您看到了错误。

其他两个答案都没有解决将对象引用强制转换为SqlString的问题。如果确定对象引用指向字符串,则很简单:

var ss = (SqlString)(string)o;
如果o可能包含字符串以外的值,则可以执行以下操作:

var ss = (SqlString)(o as string);
或者,如果您想继续以字符串格式存储非字符串数据的(危险的)路径:

var ss = o == null ? (SqlString)null : o.ToString();

回答你的问题

private void method1() {
    object o = "MyString";
    SqlString t1 = o as String        
}

如果o不是字符串,t1将为null。

dasblinkenlight,您没有回答我的问题!我不知道你的答案是如何获得3张即时选票的!我得承认你把问题说得很清楚!也许这是一个令人遗忘的程序员,或者是微软“按设计”的流行答案@BSarmady我认为,一旦您知道“指定强制转换无效”的原因,就可以轻松地使用
if
语句或条件运算符编写解决方案。SynXsiS的解决方案非常优雅,虽然:可能没有带条件的解决方案容易理解,但我非常喜欢。DBM,你在这里再次引用我的问题!我想说的是直接将
string
转换为
SqlString
存在,但是没有将
Object
转换为
SqlString
,然后我的问题是如何将
Object
转换为
SqlString
而不是
string
转换为
SqlString
!在回答这个问题之前,请仔细阅读这个问题,我想你们的意思是写
SqlString ss=(string)o。我相信你的答案是我能得到的最接近的。不幸的是,
o
的内容并不总是字符串,有时可以为null,这就是为什么我使用SqlString将null带到调用我的函数的方法中。在大多数情况下,null不等于空字符串(在整数情况下为0)private void method1() { object o = "MyString"; SqlString t1 = o as String }