我有一个将字符串化的数据解析为本地数据类型(本身的属性)的类。遍历类的属性,并使用与属性类型匹配的switch语句:
using System.Reflection;
…
class DataParser
{
public int i { get; set; }
public bool b { get; set; }
public string s { get; set; }
public DateTime d { get; set; }
public Decimal e { get; set; }
public DataParser()
{
PropertyInfo[] properties = this.GetType().GetProperties();
foreach (PropertyInfo property in properties)
{
object currentValue = property.GetValue(this);
switch (currentValue)
{
case Int32 _:
…
break;
case DateTime _:
…
break;
case Decimal _:
…
break;
case Boolean _:
…
break;
case string _:
…
break;
default:
throw new Exception($"Could not find type for {property.PropertyType}");
}
}
}
}
类型匹配适用于除string
以外的所有类型,该类型抛出:
Exception: Could not find type for System.String
是否由于string
是引用类型而导致不匹配?我用string
替换了String
和System.String
,结果相同。
更新
正如一些人所建议的那样,字符串属性的值为null
。设置默认值
public string s { get; set; } = "";
导致匹配。