2017-11-21 20 views
1

私はオブジェクトRS2005.ParameterValue[] parametersを持っています。ラベル、名前、値を宣言します。それから、別の関数に渡して、それをAと呼ぶことができます。 関数Aの中で、型変数RS2005.ParameterValue []の一時変数tempに代入しようとすると、オブジェクトが空ではなくてもnullが返されますデバッガ)。この関数はいくつかのビルド前にはうまくいきましたが、最近では機能が停止していますが、Visual Studioのバージョンを2015年に変更したことがあるかどうかは疑問です。タイプからオブジェクトへのキャストは戻り値nullを返します

オリジナル機能

RS2005.ParameterValue[] parameters = new RS2005.ParameterValue[5]; 
parameters[0] = new RS2005.ParameterValue(); 
parameters[0].Label = "a"; 
parameters[0].Name = "a"; 
parameters[0].Value = "AA"; 
..... 

frontPageBytes = Functions.functionA(parameters); 

関数A

public static byte[] functionA(object parameters) 
    { 
     byte[] bytes = null; 
     RS2005.ReportExecutionService rsExec = new RS2005.ReportExecutionService(); 
     rsExec.Credentials = new NetworkCredential(RSServerUserLogin, RSServerUserPassword, RSServerUserDomain); 
     rsExec.Url = RSServerWSURI; 
     string deviceInfo = string.Format(@"<DeviceInfo><OutputFormat>{0}</OutputFormat></DeviceInfo>", "PDF"); 

     RS2005.ExecutionInfo ei = rsExec.LoadReport(rdlPath, null); 
     RS2005.ParameterValue[] temp = parameters as RS2005.ParameterValue[]; <---------- This temp is null 

     rsExec.SetExecutionParameters(parameters as RS2005.ParameterValue[], "en-us"); <---------- this throws an exception because parameters is null 
     .... 
} 
+1

"オブジェクトが空ではないにもかかわらず"どのオブジェクトですか? 'functionA'の中の' parameters'ですか?今まであなたの問題を再現できません –

+1

おそらく愚かな質問ですが、functionAの型を 'public static byte [] functionA(RS2005.ParameterValue [] parameters)'に変更し、コンパイル時の型の安全性を助けてください。 'オブジェクト 'を通ってまた戻ることは、不必要なリスクのようです。 – StuartLC

+1

@StuartLCまたは、そのままキャストの代わりに直接キャストを使用します。 – HimBromBeere

答えて

0

私は答えを見つけました。私が質問で言及しなかったのは、関数Aであり、元の関数は異なるプロジェクトにあったということです。それはobjectにキャストしてからRS20005.ParameterValue []に​​戻さなければならない理由と関連しています。

私が気づいていないのは、プロジェクトAとプロジェクトBのレポートビューアが少し違っていたことです。 asを使用してキャストすると、C#はnullを返すことで私を保存しようとしましたが、エラーが見つからなくなりました。直接鋳造した後にのみ、問題の原因がわかりました。

関連する問題