在String.Format()上使用“控件数组”作为参数

时间:2013-06-27 17:15:28

标签: c# vb.net

我使用字符串进行如下查询:

Dim auxstring as String
auxstring = String.Format("val1 = {0}, val2 = {1}, valn ={n}", control1.Value,   control2.Value, controln.Value)

我想要做的是将String.Format转换为更可读的东西:

<object like an array>.<value1> = data1
<object like an array>.<value2> = data2
<object like an array>.<valuen> = datan

<other object like an array>.<value1> = control1.property
<other object like an array>.<value2> = control1.property
<other object like an array>.<valuen> = control1.property

auxstring = String.Format(<object like an array with values>, <object like an array with controls.properties>)

为了便于阅读:)

3 个答案:

答案 0 :(得分:0)

这是一个快速解决此问题的方法,无论您认为这是对现有代码的改进,都是一个观点问题。

List<string> vals = new List<string>();
int[] data = new int[] { 1, 2, 3, 4 };

for (int i = 0; i < data.Length; i++)
{
    vals.Add(string.Format("val{0} = {1}", i + 1, data[i]));
}

string auxstring = string.Join(",", vals.ToArray());

这个简单的例子使用了一个整数数组,但将它改为任何类型并从索引项(在循环中)中访问属性而不是索引值本身都是微不足道的。

答案 1 :(得分:0)

  

我想要做的是将String.Format转换为某种东西   更具可读性

使用行扩展符号(_):

    auxstring = String.Format("val1 = {0}, val2 = {1}, valn ={n}", _
                              control1.Value, _
                              control2.Value, _
                              controln.Value)

记住它需要一个前面的空格,并且必须是该行的最后一个字符。

如果你想要更简洁的东西我会建议重载格式功能。通过这种方式,您可以保留Option Strict On,而不必担心后期绑定的问题。

 Dim Values() As Integer = {0, 1, 2}

 Dim ValueString As String = Format("val", Values)  

 Public Function Format(Of T)(Identifier As String, ObjectArray() As T) As String
     Format = ""
     For I = 0 To ObjectArray.Length - 1
         Format += String.Format(Identifier + I.ToString + " = {0} , ", ObjectArray(I).ToString)
     Next
     Format = Format.TrimEnd({" "c, ","c})
 End Function

ValueString看起来像这样,"val0 = 0 , val1 = 1 , val2 = 2" 这将使用ToString方法接受任何数组对象。

答案 2 :(得分:0)

您可以创建属性列表,然后动态生成格式字符串以匹配属性数:

    Dim properties = {
        control1.property,
        control2.property,
        control3.property}

    Dim formatString = String.Join(", ", properties.Select(Function(_trash, i) String.Format("val{0} = {{{0}}}", i)))

    Dim auxstring = String.Format(formatString, properties)