我使用字符串进行如下查询:
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>)
为了便于阅读:)
答案 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)