将String对象强制转换为SqlString时出现异常

时间:2012-01-27 03:27:50

标签: c# types casting

我在简单的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

4 个答案:

答案 0 :(得分:4)

这是因为有implicit conversion operator for String to SqlString

换句话说,您没有处理简单的内置强制转换:SqlString的设计者决定允许您将字符串强制转换为SqlString。他们没有为Object做这件事,因此你看到了错误。

答案 1 :(得分:3)

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

var ss = (SqlString)(string)o;

如果o可能包含字符串以外的值,则可以执行此操作,而不是:

var ss = (SqlString)(o as string);

或者,如果你想沿着以字符串格式存储非字符串数据的(危险的)路径:

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

答案 2 :(得分:3)

回答你的问题

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

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

答案 3 :(得分:0)

嗯,你可以这样做:var x = new SqlString("hi mom")

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

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

一般性建议:如果您在StackOverflow上发布之前学会使用Intellisense和MSDN文档,那么您的生活可能会更容易。您可以通过使用文档在大约5秒内自己回答这个问题。