我正在C#中创建一个应用程序,该应用程序使用EConnect将信息导入大平原。 EConnect拥有自己的一组异常,这真的很高兴知道您是否向应用程序传递了错误的信息。如果抛出EConnectException,我想显示一条错误消息。我的问题是EConnect异常很长,因此我想从中提取特定部分。
异常字符串类似于以下示例:
Microsoft.Dynamics.GP.eConnect.eConnectException:返回了SQL过程错误代码:
错误号= 714存储过程= taPMTransactionInsert错误描述=您输入的1099值(TEN99AMNT)不能大于购买金额(PRCHAMNT)减去交易折扣金额(TRDISAMT)节点标识符参数:taPMTransactionInsert
对于错误消息,我真正想要的只是“错误描述”部分。因为该部分总是相同的长度,所以很容易在“错误描述”之前剪下该部分。错误说明的长度可能会有所不同,因此我无法确定如何提取错误。最后,我希望它从错误描述开始并在节点标识符参数之前结束(总是在错误描述之后)
这是我现在捕获异常并切断错误消息第一部分的方式。 setStatusErrorLogs只是我用来向我的应用显示错误的函数。
catch (eConnectException exc)
{
setStatusErrorLogs((exc.ToString()).Substring(85), xInvoiceNumber + ": ", "CreateInvoice");
}
有什么想法可以提取此字符串吗?
最佳答案
使用string.IndexOf方法
var error = exc.ToString();
var startIndex = error.IndexOf("Error Description = ") + "Error Description = ".Length;
var endIndex = error.LastIndexOf("Node Identifier Parameters:");
var desc = error.Substring(startIndex, endIndex - startIndex);
setStatusErrorLogs(desc, xInvoiceNumber + ": ", "CreateInvoice");
这种方法很容易出错!如果您不确定比赛的确切格式和内容,则应进行检查以免获取垃圾数据!
关于c# - 从更长的字符串中提取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34685744/