【问题标题】:Getting a format error, cannot convert system.double to system.string出现格式错误,无法将 system.double 转换为 system.string
【发布时间】:2016-08-17 10:18:21
【问题描述】:

问题1# 在执行以下代码时,它给了我一个格式错误。 System.double 不能转换成 System.string。

var PiePriorityCount = dt.AsEnumerable()
                       .GroupBy(item => item.Field<string>("Priority"))
                       .Select(item => new { Priority = item.Key, TicketCount = item.Count() });


        dtPriorityCount.Columns.Add("Priority", typeof(string));
        dtPriorityCount.Columns.Add("Count", typeof(int));
        lblStatus.Visible = true;
        foreach (var itm in PiePriorityCount)
        {
            //lblStatus.Text = "Z" + "->" + itm.TicketCount;
            DataRow dr = dtPriorityCount.NewRow();
            dr["Priority"] = "P" + " " +itm.Priority; 
            dr["Count"] = itm.TicketCount;
            dtPriorityCount.Rows.Add(dr);
        }  

在执行上述代码时,它给了我一个格式错误。 System.double 不能转换成 System.string。

问题2#得到答案 在 Sting LOG 中,第一行包含 Status,第二行包含 Owned Group,第三行包含 Assigned Group。所以我希望子字符串在行尾之前是 After 状态。即分配(1)

它们可以按顺序洗牌。第一个不一定是状态,它可以是拥有的组或分配的组。

string LOG = "Status: Assigned (1) \n Owned Group: Jitesh - poiuyt \n Assigned Group: Jitesh - QWERTY";

string tb = "Status: ";
string tb1 = "Assigned Group: ";

int lenght = tb.Length;
int a = LOG.IndexOf(tb) + lenght;

int lenght1 = tb1.Length;
int a1 = LOG.IndexOf(tb1) + lenght1;

var status = LOG.Substring(a,'\n');
var status1 = LOG.Substring(a1, '\n');

预期输出:
状态 = 已分配 (1)
status1 = Jitesh - QWERTY

电流输出:
状态 = 已分配 (
status1 = Jitesh - Q

这是我所期待的,这就是我得到的。

【问题讨论】:

  • 考虑选择一个更有意义的话题。
  • 这只是令人困惑。听不懂最后一句话。请展示输出在没有任何 cmets 的情况下应该是什么样子。无法区分您的 cmets 和应该属于输出的部分。
  • 您可以使用Split:1) 与\n,然后2) 与:LOG.Split('\n').Select(n =&gt; n.Split(':').LastOrDefault().Trim()).ToList()。您将有 2 个值,第一个是 status,第二个是 status1

标签: c# asp.net linq pie-chart


【解决方案1】:

你可以使用两次Split

  • \n得到Status: Assigned (1) Assigned Group: Jitesh - QWERTY,然后
  • 使用: 并修剪值。

C# demo:

var LOG = "Status: Assigned (1) \n Owned Group: Jitesh - poiuyt \n Assigned Group: Jitesh - QWERTY";
var res = LOG.Split('\n')
    .Where(p => p.Trim().StartsWith("Status:") || p.Trim().StartsWith("Assigned Group:"))
    .Select(n => n.Split(':').LastOrDefault().Trim())
    .ToList();

var status = res[0];
var status1 = res[1];

您将在那里有 2 个值,第一个是 status,第二个是 status1

另一种方法如果它们的顺序可以是随机的,则获得 2 个变量:

var status = LOG.Split('\n')
    .Where(p => p.Trim().StartsWith("Status:"))
    .Select(n => n.Split(':').LastOrDefault().Trim())
    .FirstOrDefault();
var status1 = LOG.Split('\n')
    .Where(p => p.Trim().StartsWith("Assigned Group:"))
    .Select(n => n.Split(':').LastOrDefault().Trim())
    .FirstOrDefault();

another demo

【讨论】:

  • 谢谢伙计,它现在给出了输出,但是我的尝试方式有什么问题。它只给出前 10 个字符。
  • 有一个小改动有问题。请仔细查看。
  • 我看到任务变得越来越复杂。 Status:Assigned Group: 之后的子串是否需要获取?我更新了答案以说明任何位置的那 2 个。
  • 是否应该同时存在两个值?还是少了一个?
【解决方案2】:
string LOG = "Status: Assigned (1) \n Assigned Group: Jitesh - QWERTY";

var split =  LOG.Split('\n');
var status = split[0].Split(':')[1];
var status1 = split[1].Split(':')[1];

【讨论】:

  • 没有给出想要的输出:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
  • 2015-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多