我真的被困在这里,并会感谢你的帮助。我创建了一个请求数据合同和一个服务的响应数据协定。请求DTO包含Cardnum,Id和Noteline1 ---- noteline18。响应DTO包含noteline1 - noteline18。
我将字符长度为100的字符串传递给请求数据成员noteLine1(数据长度为78个字符)。现在我想确保只有78个字符应该填入noteline1数据成员,其余的应该适合请求DTO的另一个空的noteline数据成员。我使用了以下代码,它对我来说很好:
string requestNoteReason = request.noteLine1;
if (response != null)
{
foreach (PropertyInfo reqPropertyInfo in requestPropertyInfo)
{
if (reqPropertyInfo.Name.Contains("noteLine"))
{
if (reqPropertyInfo.Name.ToLower() == ("noteline" + i))
{
if (requestNoteReason.Length < 78)
{
reqPropertyInfo.SetValue(request, requestNoteReason, null);
break;
}
else
{
reqPropertyInfo.SetValue(request, requestNoteReason.Substring(0, 78), null);
requestNoteReason = requestNoteReason.Substring(78, requestNoteReason.Length - 78);
i++;
continue;
}
}
}
}
goto Finish;
}
现在我想要包含超过78个字符长度的字符串的noteline1应该拆分并填入下一个空的直线。如果字符串长度超过200个字符,那么它应该拆分字符串并将其填入下一个连续的空字符串中。例如,如果字符串需要3个空的直线空间,那么它应该只填充下一个连续可用的空直线中的剩余字符串。(即noteline2,noteline3,noteline4)并且不应该用已经填充的字符串填充noteline以前填过。
请帮忙
答案 0 :(得分:1)
[TestFixture]
public class Test
{
[Test]
public void TestLongLength()
{
var s = new string('0', 78) + new string('1', 78) + new string('2', 42);
var testClass = new TestClass();
FillNoteProperties(s, testClass);
Assert.AreEqual(new string('0', 78), testClass.NoteLine1);
Assert.AreEqual(new string('1', 78), testClass.NoteLine2);
Assert.AreEqual(new string('2', 42), testClass.NoteLine3);
}
public static void FillNoteProperties(string note, TestClass testClass)
{
var properties = testClass.GetType().GetProperties();
var noteProperties = (from noteProperty in properties
where noteProperty.Name.StartsWith("NoteLine", StringComparison.OrdinalIgnoreCase)
orderby noteProperty.Name.Length, noteProperty.Name
select noteProperty).ToList();
var i = 0;
while (note.Length > 78)
{
noteProperties[i].SetValue(testClass, note.Substring(0, 78), null);
note = note.Substring(78);
i++;
}
noteProperties[i].SetValue(testClass, note, null);
}
}