我在简单的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
?
答案 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秒内自己回答这个问题。