簡體   English   中英

如何歸納通用方法以解析文本並為不同數量的變量分配給變量列表?

[英]How to generalize a generic method to parse text and assign to a list of variables for different number of variables?

我需要閱讀一個制表符(或逗號)分隔的文本,並將它們分配給內置變量(int,char,string等,但不是對象)的列表。 我想用通用方法來處理。 這是我用於帶有三個變量的情況的工作代碼。

public static void ReadVariablesFromString<T0, T1, T2>(out T0 input0, out T1 input1, out T2 input2, string stringIn, char[] separators)
{
    string[] stringParts = stringIn.Split(separators);
    input0 = ConvertTo<T0>(stringParts[0]);
    input1 = ConvertTo<T1>(stringParts[1]);
    input2 = ConvertTo<T2>(stringParts[2]);
}

public static T ConvertTo<T>(object value)
{
    return (T)Convert.ChangeType(value, typeof(T));
}

當我想將制表符分隔的文本分配給不同類型的三個變量時,這就是我所使用的:

string str = "a\t123\tbcd";

char var1;
int var2;
string var3;

char[] separators = { '\t' };

ReadVariablesFromString(out var1, out var2, out var3, str, separators);

有沒有一種方法可以針對不同數量的變量推廣此模型? 是否可以編寫一個通用方法來針對這種特定情況接受不同數量的變量?

另一種解決方案可能是針對具有不同類型的變量列表編寫此方法。 而不是一個一個地傳遞變量,有沒有辦法在列表中傳遞它們?

不,在C#中,您不能發送變量引用數組。

但是您可以做的是創建一個具有某些屬性的類,然后使用反射來填充它們。

有關一些詳細信息,請參見枚舉C#中的對象屬性(字符串)使用反射設置對象屬性以及如何將字符串類型的對象動態轉換為T類型的對象

我建議你返回一個清單

List<object> variables = ReadVariablesFromString(str, separators);

列表中的每個條目將是您從輸入字符串中解析的值,例如

variables.ElementAt(0) will be 'a'

由於列表的類型是“對象”,因此您可以在其中存儲任何數據類型,因為每種類型最終都會從object繼承而來。 但是,當您需要使用數據時,您將需要強制轉換數據

char letter = (char)variables.ElementAt(0)

但是,你必須是已經做類似的事情,否則你怎么知道擺在每個進入哪個變量out參數。

這樣做意味着您可以從ReadVariablesFromString()返回的變量數量上具有更大的靈活性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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