[英]C# convert comma separated string to dynamic type
如何將 CSV 字符串轉換為僅在運行時已知的類型的數組。 假設我的 class 中有 2 個不同類型的數組字段,聲明為int[] intArray
和string[] strArray
。 我想要一個 function ,我在其中傳入 2 個參數字段名稱和 CSV 字符串。 我可以使用...; FieldInfo f =... ; Type t = f.FieldType.GetElementType();
...; FieldInfo f =... ; Type t = f.FieldType.GetElementType();
但我不能做的是聲明List<t>
因為 t 是一個變量而不是一個類型。 我看到一篇帖子建議csv.Split(',').Select(s => Convert.ChangeType(s, t)).ToArray()
但這作為 object 數組而不是 int 或字符串數組出現; 另一個帖子說...; var list = (IList) Activate.CreatInstance(...)
...; var list = (IList) Activate.CreatInstance(...)
,這很好,我可以調用list.Add(...)
但是我該怎么做,因為我需要一個 t 數組。
我已經咬緊牙關了,所以如果我需要一種新類型,比如浮點數數組說是必需的,那么我必須更新我的代碼,但這足以滿足我今天的需要,而且我同意其他關於 CSV 的提及如果我的值有逗號表示地址並輸入為“\”12 George St, Sydney\”、\“200 Sussex St, Sydney\””,那么我將不得不考慮高級 CSV 但是這又是我今天所需要的。
class SetPropertyByName
{
public object this[string fieldName]
{
set
{
FieldInfo field = this.GetType().GetField(fieldName, BindingFlags.Public | BindingFlags.Instance);
if (null != field)
{
if (field.FieldType.IsArray && value is String)
{
string newValue = (string)value;
if (string.IsNullOrEmpty(newValue))
value = null;
else
{
var conversionType = field.FieldType.GetElementType();
if (conversionType == typeof(string))
{
value = newValue.Split(',').ToArray();
}
else if (conversionType == typeof(int))
{
value = newValue.Split(',').Select(s => Convert.ToInt32(s)).ToArray();
}
}
field.SetValue(this, value);
}
else
field.SetValue(this, Convert.ChangeType(value, field.FieldType));
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.