我试图将一个对象变量转换为一个StreamWriter。但是,它不起作用。错误是什么?
StreamWriter file = (StreamWriter) myObject;
myObject
的值不是(可转换为)StreamWriter。
试试这个:
if (myObject is StreamWriter)
{
var file = (StreamWriter) myObject as StreamWriter;
}
我愚蠢的另一个时刻。我已经注释掉了这样做的行 - Object myObject = Dts.Variables["yourStreamWriterHere"]。价值;所以,myObject内部什么都没有。那里有空吗?在爪哇中是这样。此外,java 给你提供了一个很好的 nullPointerException。但是,Visual Studio给你一个神秘的"Micro$lop™:找不到错误的原因。联系比利寻求更多帮助。随身携带信用卡以防万一。呼叫中心的等待时间各不相同"。只是令人恼火。
无论如何,你得到的真正错误是——
Error: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidCastException: Unable to cast object of type 'System.Object' to type 'System.IO.StreamWriter'.
at ST_ffrrefr939322939392dfr.csproj.ScriptMain.Main()
--- End of inner exception stack trace ---
at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
at Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()
在转换之前,请使用 is
关键字检查是否可以将其转换为StreamWriter
对象,如下所示:
if(myObject is StreamWriter)
{
//can be cast
}
else
{
//can not be cast
}