System.InvalidCastException:无法将“System.Object”类型的对象转换为“System.IO.StreamWriter”类型

问题描述 投票:0回答:4

我尝试将对象变量转换为 StreamWriter。但是,它不起作用。有什么错误吗?

StreamWriter file = (StreamWriter) myObject;
c# ssis .net-3.0
4个回答
3
投票

myObject
的值不可(转换为)StreamWriter。


3
投票

试试这个:

if (myObject is StreamWriter) 
{
    var file = (StreamWriter) myObject as StreamWriter;
}

2
投票

我的又一个愚蠢时刻。我已经注释掉了执行此操作的行 -

Object myObject = Dts.Variables["yourStreamWriterHere"].Value;
所以,里面没有任何内容
myObject
。那里有空吗?在Java 中确实如此。另外,java 给了你一个很好的
nullPointerException
。但是,Visual Studio 会给您一个神秘的“Micro$lop™:找不到错误原因。请联系 Billy 获取更多帮助。请将信用卡放在手边以防万一。呼叫中心等待时间各不相同”。只是令人恼火。

无论如何,你得到的真正错误是 -

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()

1
投票

在转换之前,请检查是否可以使用

StreamWriter
关键字将其转换为
is
对象,如下所示:

if(myObject is StreamWriter)
{
//can be cast
}
else
{
//can not be cast
}
© www.soinside.com 2019 - 2024. All rights reserved.