是否可以获取参数名称(我在下面有parmName)? 或者也许在MSIL代码中只有相对位置,没有绝对parm名称?.NET所有方法参数的反射
我有一个在Microsoft Host Integration Server中使用HIP的不寻常的情况。当字段为NULL并且错误返回到CICS(在大型机上)时,错误是“A CALL TO VERIFYINVOKEPARAMS FAILED”。我对一个解决方案进行了硬编码,但试图制定一个适用于任何HIP子例程的通用解决方案。
感谢,
尼尔·沃尔特斯
// check for null values in any of the parameters
MethodBase method = MethodBase.GetCurrentMethod();
//string key = method.Name + "(";
for (int i = 0; i < method.GetParameters().Length; i++)
{
if (method.GetParameters().GetValue(i).GetType() == typeof(String))
{
if (method.GetParameters().GetValue(i) == null)
{
string parmName = " Parm #" + i;
msg = "Value of return variable " + parmName + " is null (should be blanks)";
System.Diagnostics.EventLog.WriteEntry("LOGGER", msg,
System.Diagnostics.EventLogEntryType.Error);
}
}
}
额外的信息: 我打电话出版作为一个WCF Web服务一个BizTalk乐团。当它出现错误时,有些字段不会返回到上述程序。这就是数值如何成为NULL的原因。但是调用我的HIS/HIP程序的CICS /应用程序并不像空值。
对不起扶手椅的建筑师,但我看到你在那里做什么,我不确定它落在最佳实践的领域......但我可能是错的。它可能更好,只是做!= null检查并抛出ArgumentNullExceptions,然后在异常处理程序中处理日志记录。至少,这是我见过的标准。 *耸耸肩* – 2009-12-07 19:52:39
在这种情况下,可能会更好地忽略空值。抛出异常会有什么好处呢?他将不得不改变可能会很多的调用代码。 – ChaosPandion 2009-12-07 19:57:57
由于HIS/HIP的性质,我有26个参数,每个都通过ref传递,代表COBOL结构。这是很多if语句,我们将不得不在未来的HIP计划中再次这样做。 HIP将.NET字段翻译为相应的COBOL格式(PIC S9(4)COMP等)。 – NealWalters 2009-12-07 20:23:26