【问题标题】:Mapping string values to properties' values in c#将字符串值映射到 c# 中的属性值
【发布时间】:2018-01-22 11:33:10
【问题描述】:

我是 C# 的新手,我有一个问题

我有一个这样的类模型:

 public class SDView
    {
        public int ViewPK { get; set; }
        public string Code { get; set; }
        public string Name { get; set; }
        public string ConceptOrder { get; set; } 
    }

最后一个属性,ConceptOrder 包含一串数字,每个数字需要映射到不同的属性值...

例子:

Being ConceptOrder = "1,2,3,5,4"

  public class Item
        {
            public string Warehouse { get; set; } //concept 1
            public string Commodity { get; set; } //concept 2
            public string Variety { get; set; }   //concept 3
            public string Packstyle { get; set; } //concept 4
            public string Size { get; set; }      //concept 5
        }

我需要做的是编写一个返回的方法或函数(基于上面的例子)

“Warehouse01 BellPepper Green JUMBO 7x1”

ConceptOrder 可以是任意顺序,但每个数字都映射到某个 Property(1 始终是 Warehouse...2 始终是 Commodity)

显然这个例子被简化了

我无法理解这个

任何帮助将不胜感激!

编辑:

正是我想要做的是,我有具有属性的类模型:

SDView 类的ConceptOrder 属性包含这些属性必须在字符串属性中显示的顺序

所以我需要一个函数/方法,我可以在其中传递一个 ConceptOrder ("2, 3, 1, 4, 5") 并返回一个格式化字符串...

public class Item
        {
            public string Warehouse { get; set; } //concept 1
            public string Commodity { get; set; } //concept 2
            public string Variety { get; set; }   //concept 3
            public string Packstyle { get; set; } //concept 4
            public string Size { get; set; }      //concept 5

            public string GetProductFromView(string conceptOrder)
           {

           ...

          return "CommodityPropValue VarietyPropValue WarehousePropValue.. etc"

}}

【问题讨论】:

  • ConceptOrder 的示例数据和预期输出是什么?到目前为止,您尝试过什么?
  • 不是 100% 确定您要做什么,您能否进一步澄清问题?

标签: c# arrays function properties mapping


【解决方案1】:

ConceptValue 处理每个不同的属性,ConceptValues 将获取 ConceptOrder 中每个值的 ConceptValue,并将它们放在一个字符串中,每个值之间有一个空格。

public string ConceptValues(string conceptOrder)
{
    var split = conceptOrder.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries);

    var nums = split.Select(s => Int32.Parse(s.Trim()));

    return nums.Select(n => ConceptValue(n))
        .Aggregate((acc, s) => string.Format("{0} {1}", acc, s));
}

public string ConceptValue(int concept)
{
    switch (conceptOrder)
    {
        case 1:
            return Warehouse;
        case 2:
            return Commodity;
        // etc...
        default:
            throw new ArgumentException("Unhandled Concept", "concept");
    }
}

测试使用...

class Program
{
    private static string str1 { get; set; }
    private static string str2 { get; set; }
    private static string str3 { get; set; }
    private static string ConceptOrder { get; set; }

    static void Main(string[] args)
    {
        str1 = "string1";
        str2 = "string2";
        str3 = "string3";
        ConceptOrder = "2, 3, 1";
        Console.WriteLine(ConceptValues(ConceptOrder));
        // output: string2 string3 string1
        Console.ReadKey(true);
    }
}

【讨论】:

  • 对不起,如果我没有正确表达自己,英语不是我的母语 我需要做的是以正确的顺序和一个字符串返回属性值,此顺序由ConceptOrder 属性 所以在上面的例子中,我必须将“1”替换为属性 Warehouse 的值,将“2”替换为属性 Commodity 等等,但所有内容都在一个最后的字符串中......就像一个描述
  • 太棒了,我去看看!谢谢!
  • @88Keys 仅供参考,另一个答案在概念上基本上是相同的代码。我的只是更加冗长,有额外的预防措施(删除空的 csv,修剪任何空白)。
【解决方案2】:

所以,在Item 类中,你有一个这样的方法

public string GetProductFromView(string conceptOrder)
{
    int[] ConceptOrder = conceptOrder.Split(',').Select(x=>Convert.ToInt32(x)).ToArray();
    string[] Properties = new string[] {Warehouse,Commodity,Variety,Packstyle,Size};
    return string.Join(" ", ConceptOrder.Select(x=>Properties[x]));
}

【讨论】:

  • 但是,你明白这是什么以及如何做到的吗?...哦,我忘记了方法的第一行中的.ToArray()
  • 你试过.ToArray()吗?是否还有其他我没有发现的问题?
猜你喜欢
  • 1970-01-01
  • 2012-08-21
  • 2017-06-10
  • 2020-12-27
  • 1970-01-01
  • 2018-07-09
  • 2021-11-09
  • 2019-06-09
  • 2021-01-15
相关资源
最近更新 更多