将String解析为泛型Comparable

时间:2016-06-17 14:35:53

标签: c#

我有以下课程:

                    <td>Photo</td>
                    <td style="text-align: center"><img src="<?php base_url() ?>uploads/volunteer/<?php echo $_POST['userfile']; ?>" height="100" width="150"></td>
                </tr>

我需要检查所有值是否可以转换为T.如果是,则返回转换后的值&#34;结果&#34;。但如果至少有一个不可转换,我想返回false,结果为null。

我会使用Int32解析,布尔解析......但在这种情况下我不确定类型T.我只是知道它是可比较的。

我该怎么做?

2 个答案:

答案 0 :(得分:4)

我使用它,大部分时间都运行良好:

string.IsNullOrEmpty(stringValue) 
    ? default(T)
    : (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromInvariantString(stringValue);

类型描述符还提供CanConvertFrom方法,允许您提前检查您的类型是否可转换。

问题的完整解决方案是:

public static Boolean TryParse(String[] values, out List<T> result) 
{      
    var converter = TypeDescriptor.GetConverter(typeof(T)); // Store these in a concurrent dictionary if you want to be more efficient
    if (!converter.CanConvertFrom(typeof(T)))
    {
        result = null;
        return false;
    }

    result = values.Select(value => (T)converter.ConvertFromInvariantString(value)).ToList();
    return true;
}

答案 1 :(得分:3)

您可以使用TypeConverter(至少对于那些拥有自己public class Filter<T> where T : IComparable<T> { public static Boolean TryParse(String[] values, out List<T> result) { result = null; try { TypeConverter converter = TypeDescriptor.GetConverter(typeof(T)); result = values.Select(v => converter.ConvertFromInvariantString(v)).ToList(); return true; } catch { return false; } } } 的类型,大多数标准类型都是如此):

TypeConverter

对于您的自定义类型,您需要实现自己的val value: String = properties(j).attribute("value").toString print(value) 。有关如何执行此操作,请参阅this MSDN article