簡體   English   中英

C# 將逗號分隔的字符串轉換為動態類型

[英]C# convert comma separated string to dynamic type

如何將 CSV 字符串轉換為僅在運行時已知的類型的數組。 假設我的 class 中有 2 個不同類型的數組字段,聲明為int[] intArraystring[] 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 數組。

我建議使用 nuget package 進行此解析。 CsvHelper有一個如何反序列化為給定類型的示例。

我已經咬緊牙關了,所以如果我需要一種新類型,比如浮點數數組說是必需的,那么我必須更新我的代碼,但這足以滿足我今天的需要,而且我同意其他關於 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM