-1

我真的被困在这里,并会感谢您的帮助。我创建了服务的请求数据合同和响应数据合同。请求 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之前填的。

请帮忙

4

1 回答 1

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);
    }
}
于 2012-07-26T06:34:28.033 回答