0

我有一个包含 3 列 col1、col2、col3 的数据表 DT。

我写了下面的代码

Boolean fst = true;
              string q = Convert.ToString('"');
              foreach (DataColumn co in DT.Columns)
              {   

                    if (fst)
                        {
                          colname = colname + q + co.ColumnName+q  ;
                          fst = false;
                          }
                          else
                          colname = colname +","+ q+co.ColumnName+q ;

               }

我想得到的输出是 colname="col1","col2","col3"

但我得到一个输出 colname="\"col1\",\"col2\",\"col3\"

如何获得所需的输出?请任何指点......

除此之外,我还有一个包含 4 列 col1、col2、col3、col4 的数据表 DT。

str = String.Format("{0,-30}{0,-30}{0,-30}{0,-30}", "Col1", "Col2", "Col3", "Col4");

如果我们将 str 写入文件,它将生成输出

Heloo                         Heloo                         Heloo                         Heloo 

我需要以编程方式进行

       string str="";
    Boolean fst = true;
             string q = Convert.ToString('"');
    string frmt="";
              foreach (DataColumn co in DT.Columns)
              {   

                    if (fst)
                        {
                          colname = colname + q + co.ColumnName+q  ;
                          fst = false;
                          }
                          else
                          colname = colname +","+ q+co.ColumnName+q ;

        frmt = frmt +"{0,-30}";

               }

  str= String.Format(frmt, colname);

这里的值为 frmt="{0,-30}{0,-30}{0,-30}"; colname="Col1"、"Col2"、"Col3"、"Col4" 的值;

但是,如果我将 str 写入文件,它会给出错误的输出。关于如何实现它的任何指示?

4

5 回答 5

1

您的代码正在输出您希望它输出的内容。

您在对问题的评论中说过,您在调试时会看到这一点;这只是 Watch 窗口的一个功能,为您转义引号字符。

顺便说一句,您的代码可以通过多种方式更有效地编写;一个例子,这仍然是合理的可读:

colname = "";
foreach (DataColumn co in DT.Columns) {   
    colname += "\"" + co.ColumnName + "\",";
}
colname = colname.TrimEnd(',');
于 2013-07-09T11:16:17.397 回答
0
  string q = string.empty
              foreach (DataColumn co in DT.Columns)
              {   
    q =+ "\"";
                 q = q + co.ColumnName + "\"" + ",";

               }
q = q.remove(q.length - 1 , 1 )
于 2013-07-09T11:18:27.580 回答
0

\

Boolean fst = true;
string q = Convert.ToString('\"');

foreach (DataColumn co in DT.Columns) {   
    if (fst) {
        colname = colname + q + co.ColumnName + q  ;
        fst = false;
    } else
        colname = colname +","+ q + co.ColumnName + q ;
}

也试试这个

colname = colname + @"" + co.ColumnName + @""  ;
于 2013-07-09T11:17:08.870 回答
0

您的原始代码既(a)没有生成正确的格式字符串,又(b)试图将字符串提供给String.Format需要数组的位置。

var columns = DT.Columns.Select(c => c.ColumnName);

var colname = string.Join(",", columns.Select(c => string.Format("\"{0}\"", c)));
var str = string.Join("", columns.Select(c => string.Format("{0,-30}", string.Format("\"{0}\"", c))));

如果您不需要在中引用列名str,它将是

var str = string.Join("", columns.Select(c => string.Format("{0,-30}", c)));
于 2013-07-09T11:57:59.787 回答
0

这有点干净:

        var tab = new DataTable();

        int row = 0;
        var columnNames = from DataColumn c in tab.Columns
                          let count = row++
                          select string.Format("{0, -30}",c.ColumnName + row);

        string.Join(", ", columnNames);
于 2013-07-09T11:50:51.813 回答