我需要将字符串"foo1,foo2,foo3"转换为string[]。
我想使用TypeConverter或它的子ArrayConverter。其包含方法ConvertFromString。
但是,如果我调用此方法,则会捕获异常ArrayConverter cannot convert from System.String.
我知道Split的事,不要建议我这个解决方案。
----SOLUTION---
使用@Marc的建议和@Patrick对这个主题的回答,我写了CustumTypeDescriptorProvider
public class CustumTypeDescriptorProvider:TypeDescriptionProvider
{
public override ICustomTypeDescriptor GetTypeDescriptor(System.Type objectType, object instance)
{
if (objectType.Name == "String[]") return new StringArrayDescriptor();
return base.GetTypeDescriptor(objectType, instance);
}
}
public class StringArrayDescriptor : CustomTypeDescriptor
{
public override TypeConverter GetConverter()
{
return new StringArrayConverter();
}
}在下面的文章中,StringArrayConverter是在应答中实现的。为了使用它,我将CustumTypeDescriptorProvider添加到提供程序的集合中
TypeDescriptor.AddProvider(new CustumTypeDescriptorProvider(), typeof(string[]));要在TestClass中使用它,需要编写几行代码:
TypeConverter typeConverter = TypeDescriptor.GetConverter(prop.PropertyType);
cValue = typeConverter.ConvertFromString(Value);我相信这能帮助一个人,让他免受愤怒的打击。
发布于 2015-12-17 08:41:31
这很简单:你不能。
new ArrayConverter().CanConvertFrom(typeof(string));返回假。
您最好的选择是您自己提到的选项:string.Split,或者从ArrayConverter派生并实现您自己的:
public class StringArrayConverter : ArrayConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
if (sourceType == typeof(string))
{
return true;
}
return base.CanConvertFrom(context, sourceType);
}
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
string s = value as string;
if (!string.IsNullOrEmpty(s))
{
return ((string)value).Split(',');
}
return base.ConvertFrom(context, culture, value);
}
}最后,我仍然使用string.Split。当然,您可以想出我们自己的实现。
发布于 2015-12-17 08:45:46
您可以使用Regex.Matches
string[] result =
Regex.Matches("foo1,foo2,foo3", @",").Cast<Match>().Select(m => m.Value).ToArray();编辑:我没有正确地理解正则表达式,但要点仍然有效。
https://stackoverflow.com/questions/34330017
复制相似问题