首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TypeConverter将字符串转换为字符串数组

使用TypeConverter将字符串转换为字符串数组
EN

Stack Overflow用户
提问于 2015-12-17 08:38:04
回答 2查看 3.2K关注 0票数 1

我需要将字符串"foo1,foo2,foo3"转换为string[]

我想使用TypeConverter或它的子ArrayConverter。其包含方法ConvertFromString

但是,如果我调用此方法,则会捕获异常ArrayConverter cannot convert from System.String.

我知道Split的事,不要建议我这个解决方案。

----SOLUTION---

使用@Marc的建议和@Patrick对这个主题的回答,我写了CustumTypeDescriptorProvider

代码语言:javascript
复制
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添加到提供程序的集合中

代码语言:javascript
复制
 TypeDescriptor.AddProvider(new CustumTypeDescriptorProvider(), typeof(string[]));

要在TestClass中使用它,需要编写几行代码:

代码语言:javascript
复制
 TypeConverter typeConverter = TypeDescriptor.GetConverter(prop.PropertyType);
 cValue = typeConverter.ConvertFromString(Value);

我相信这能帮助一个人,让他免受愤怒的打击。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-17 08:41:31

这很简单:你不能。

代码语言:javascript
复制
new ArrayConverter().CanConvertFrom(typeof(string));

返回假。

您最好的选择是您自己提到的选项:string.Split,或者从ArrayConverter派生并实现您自己的:

代码语言:javascript
复制
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。当然,您可以想出我们自己的实现。

票数 8
EN

Stack Overflow用户

发布于 2015-12-17 08:45:46

您可以使用Regex.Matches

代码语言:javascript
复制
string[] result =
  Regex.Matches("foo1,foo2,foo3", @",").Cast<Match>().Select(m => m.Value).ToArray();

编辑:我没有正确地理解正则表达式,但要点仍然有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34330017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档