【问题标题】:how to create properties with sub properties having constant values in a class using c#如何使用c#在类中创建具有具有常量值的子属性的属性
【发布时间】:2014-12-01 07:12:49
【问题描述】:

我想使用 StringBuilder() 类创建一个字符串。我有一组说员工的记录。 Employee的每条记录都有firstName、lastName、city等列。 我要创建的字符串将具有上述各列的值。 为此,我需要创建一个类

class Columns
{
    string Firstname
    {
        startPosition = 1;
        length = 32;
    }

    string LastName
    {
        startPosition = 33;
        length = 32;
    }
}

在我正在构建的字符串中,我需要在提到的相应起始位置插入 Firstname,Lastname 的值。我是新手,我需要帮助来创建上述课程。上面指定的代码只是类应该是什么样的原型,但我不知道如何创建它。我需要属性 startPosition 和 length 出现在所有列中,并且这些值需要硬编码。对不起,如果我的问题含糊不清。请帮忙..

【问题讨论】:

  • 这真的不是一个有效的课程——你在这里想要做什么非常不清楚。一个类不能在这样的字符串中指定位置。听起来您可能想要通过反射检索的属性,但实际上并不清楚。我建议您尝试使用StringBuilder 在代码中对其进行硬编码 - 现在忽略它的类部分。弄清楚如何使用StringBuilder 并应用填充等,然后你就可以弄清楚如何将这些信息放入属性中。
  • 听起来属性不应该是简单的string类型,而是它们自己的小类/结构。像public class MyPropertyType { public string Value { get; set; } public int StartPosition { get; set; } public int Length { get; set; } } --- 然后你的Colums 类可能看起来像class Columns { MyPropertyType Firstname { get; set; } MyPropertyType LastName { get; set; } } --- (顺便说一句。为什么FirstnameLastName?为什么不FirstNameLastname 匹配大小写另一个?)
  • 您好,感谢您的回答。关于外壳,这只是一个打字错误。我不想在这里使用 get-set 属性,因为我已经知道 startPosition 和 length 字段的值。我在想,如果我可以获取这些值,那么我可以将它传递给 StringBuilder.Insert(startPos, "string") 方法并将其放入 foreach 循环中,以便每次读取 FirstName 或 LastName 的值时,它都应该在相应的 startPositions 处插入这些值。

标签: c# stringbuilder


【解决方案1】:

首先让我告诉你,没有“子属性”这样的东西。您可以做的是拥有一个公开属性本身的类的属性/字段。

因此,您可能希望为一个Column 创建一个class,然后创建一个List 来跟踪您的列,如下例所示。

public class Column
{
    public string Name { get; set; }
    public int StartPos { get; set; }
    public int Length { get; set; }
}

public class Test
{
    private List<Column> Columns = new List<Column>();

    public Test()
    {
        this.Columns.Add(new Column { Name = "FirstName", StartPos = 1, Length = 32 });
        this.Columns.Add(new Column { Name = "LastName", StartPos = 33, Length = 32 });
    }

    public string GetThatString(string str)
    {
        foreach (var col in this.Columns)
        {
            // Do what you need. Sample:
            var item = str.Substring(col.StartPos, col.Length);
            Console.WriteLine("{0}: {1}", col.Name, item);
        }
    }
}

然后您可以遍历列表中的项目并让您的字符串生成器完成您需要的工作。 当然,您也可以为每个列创建一个属性,而不是为所有列创建一个列表。

【讨论】:

    猜你喜欢
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 2023-03-19
    • 2015-12-03
    相关资源
    最近更新 更多