Я попытался преобразовать переменную Object в StreamWriter. Но это не работает. Какая ошибка?System.InvalidCastException: невозможно лить объект типа «System.Object» для ввода «System.IO.StreamWriter»
StreamWriter file = (StreamWriter) myObject;
Я попытался преобразовать переменную Object в StreamWriter. Но это не работает. Какая ошибка?System.InvalidCastException: невозможно лить объект типа «System.Object» для ввода «System.IO.StreamWriter»
StreamWriter file = (StreamWriter) myObject;
Другой момент моей глупости. Я прокомментировал строку, которая делает это: Object myObject = Dts.Variables ["yourStreamWriterHere"]. Итак, внутри myObject ничего не было. Есть ли там нуль? В Java это так. Кроме того, java дает вам прекрасное исключение nullPointerException. Но, визуальная студия дает вам загадочную «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()
Да, это будет пустой, если вы его не назначили. Вы не получаете исключение NullReferenceException, потому что не происходит дефрагментация. – Rik
@blasto: да, тогда он угрюм содержит нуль, а когда вы вызываете какую-либо функцию на нем, бросает null refrence. Исключение –
@blast. На C# объекты, которые являются «нулями», действительно имеют тип; Вы можете использовать 'null' для любого типа, который вы хотите. Например, вы можете передать значение null в качестве параметра метода, пока нулевой, который вы передаете, имеет тот же тип, что и указанный параметр метода. –
Значение myObject
не является (конвертируемая к ним) StreamWriter.
Теперь я внимательно изучил значение слова. Имеет смысл. Мое значение было null. – Steam
Попробуйте это:
if (myObject is StreamWriter)
{
var file = (StreamWriter) myObject as StreamWriter;
}
Это работает независимо от того, является ли 'myObject'' null '. Однако в C# существует разница между объектом, который является «null», и объектом, который неинициализирован. Таким образом, вышеописанное работает, если 'myObject' был объявлен и инициализирован через' object myObject = null', но нет, если он только что был объявлен через 'object myObject;' без инициализации. В вашем случае я предполагаю, что 'myObject' является параметром (типа' object') для метода и передается 'StreamWriter'. До тех пор, пока этот «StreamWriter» был инициализирован, даже если «StreamWriter sw = null;», вышеупомянутое будет работать без ошибок. –
Перед преобразованием, проверьте, если он может быть приведен к StreamWriter
объекта, используя is
ключевое слово, как показано ниже:
if(myObject is StreamWriter)
{
//can be cast
}
else
{
//can not be cast
}
Ну это a 'System.Object' - это не' System.IO.StreamWriter'. Откуда вы его взяли, и почему вы * ожидаете, что сможете передать его в StreamWriter? –
myObject на самом деле является переменной SSIS, которая была получена с использованием кода 'Object myObject = Dts.Variables [" yourStreamWriterHere "]. Значение;' Опять же, не беспокойтесь об этом. Давайте посмотрим на C#. – Steam
@JonSkeet - Мой ответ приведен ниже. – Steam