我有一个int数组作为Web用户控件的属性。如果可能,我想使用以下语法内联设置该属性:
<uc1:mycontrol runat="server" myintarray="1,2,3" />
这将在运行时失败,因为它会期待一个实际的int数组,而是传递一个字符串。我可以使myintarray一个字符串,并在setter中解析,但我想知道是否有一个更优雅的解决方案。
解决方法
实施类型转换器,这里是一个,警告:快速和脏,不用于生产使用等:
public class IntArrayConverter : System.ComponentModel.TypeConverter { public override bool CanConvertFrom(System.ComponentModel.ITypeDescriptorContext context,Type sourceType) { return sourceType == typeof(string); } public override object ConvertFrom(System.ComponentModel.ITypeDescriptorContext context,System.Globalization.CultureInfo culture,object value) { string val = value as string; string[] vals = val.Split(','); System.Collections.Generic.List<int> ints = new System.Collections.Generic.List<int>(); foreach (string s in vals) ints.Add(Convert.ToInt32(s)); return ints.ToArray(); } }
private int[] ints; [TypeConverter(typeof(IntsConverter))] public int[] Ints { get { return this.ints; } set { this.ints = value; } }