注意:我没有使用子字符串。
为什么会导致索引和长度位置错误?注意:具体来说,导致它的部分是if语句,它检查PONumber的长度--- btw:在执行时有一个长度为11个字符的值。
[StringLength(41)]
private string _EXTENDEDDESCRIPTION;
public string EXTENDEDDESCRIPTION
{
get { return _EXTENDEDDESCRIPTION; }
set { _EXTENDEDDESCRIPTION = value; }
}
public string PONumber { get; set; }
//Note, this is embedded inside a save method for the class
if ((this.EXTENDEDDESCRIPTION ?? string.Empty) == string.Empty)
{
if (this.PONumber.Length <= 41)
{
this.EXTENDEDDESCRIPTION = this.PONumber;
}
}
导致此错误:
Index and length must refer to a location within the string.
Parameter name: length
System.ArgumentOutOfRangeException: Index and length must refer to a location within the string.
Parameter name: length
at System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy)
不幸的是,我在本地调试时无法复制此问题,我不得不依赖日志来告诉我生产中是否有什么不同。但是,我知道PONumber有一个长度。它是一个不可为空的字符串。它应该返回至少0.在我的生产情况下,它的长度为11,如果我删除if语句并且只是设置EXTENDEDDESCRIPTION,它将从PONumber获得11个字符值。
答案 0 :(得分:1)
你声明你没有使用substring,但是那个函数(InternalSubStringWithChecks)只在所有框架中由Substring调用(使用反编译器并查看它,它只由Substring调用)。
也许你的代码不是抛出异常的代码,你错过了完整的堆栈跟踪(至少在这里没有发布,你怎么确定生成异常的代码片段?),也许挖掘更多在堆栈中可以发光。