我知道这是一个愚蠢的问题,但我真的很困惑。以下是代码:
PropertyInfo[] requestPropertyInfo;
requestPropertyInfo = typeof(CBNotesInqAndMaintRequest).GetProperties();
CBNotesInqAndMaintRequest包含请求数据成员noteline1 --- noteline18。一旦我读了一个数据成员的名字,我想得到它的最后一个索引。例如。如果请求对象的名称是“noteline8”,我想将索引设为8。
为此,我写了以下代码:
foreach (PropertyInfo reqPropertyInfo in requestPropertyInfo)
{
index = reqPropertyInfo.Name.LastIndexOf("noteline");
}
但是上面的代码将索引返回为0.请帮助
答案 0 :(得分:3)
这就是你想要的吗?
foreach (PropertyInfo reqPropertyInfo in requestPropertyInfo)
{
index = int.Parse(reqPropertyInfo.Name.Replace("noteline",""));
}
答案 1 :(得分:2)
看起来你想在'noteline'之后得到这个数字。如果是这样的话:
index = int.Parse(reqPropertyInfo.Name.SubString(8));
答案 2 :(得分:2)
index = reqPropertyInfo.Name.Length -1;
如果是“noteline18”,你想要找到1而不是8的索引,那么
index = reqPropertyInfo.Name.LastIndexOf('e') + 1
答案 3 :(得分:1)
你得到0
的原因是它返回整个字符串“noteline”的最后一个索引,当然,它始终位于第0位。如果你有“notelinenoteline”,它将是返回“8”。
现在,关于你想要什么回来:
index = reqPropertyInfo.Name.Substring(8);
答案 4 :(得分:1)
我创建了一个RegEx解决方案,它与属性名称无关,但是抓取最后的数字并返回一个整数
static int GetLastInteger( string name ) {
int value;
if( int.TryParse( name, out value ) ) {
return value;
}
System.Text.RegularExpressions.Regex r =
new System.Text.RegularExpressions.Regex( @"[^0-9](\d+\b)" );
System.Text.RegularExpressions.Match m =
r.Match( name );
string strValue = m.Groups[1].Value;
value = ( int.Parse( strValue ) );
return value;
}
可以在你的例子中使用:
foreach (PropertyInfo reqPropertyInfo in requestPropertyInfo)
{
index = GetLastInteger(reqPropertyInfo.Name);
}
答案 5 :(得分:0)
LastIndexOf
返回您要查找的字符串的起始索引,这就是它返回0的原因。
答案 6 :(得分:0)
修改强>
考虑到你的评论,你应该这样做:
Int32 index = Convert.ToInt32(reqPropertyInfo.Name.Replace("noteline",""));
答案 7 :(得分:0)
我认为最简单的答案是获取字符串的计数然后将其减去1,将为您提供该字符串的最后一个索引,如下所示: -
int lastIndex= sampleString.Count-1; //sampleString is the string here.