Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何推广一种通用方法来解析文本,并为不同数量的变量分配一个变量列表?_C#_.net_Generic Programming - Fatal编程技术网

C# 如何推广一种通用方法来解析文本,并为不同数量的变量分配一个变量列表?

C# 如何推广一种通用方法来解析文本,并为不同数量的变量分配一个变量列表?,c#,.net,generic-programming,C#,.net,Generic Programming,我需要读取一个以制表符(或逗号)分隔的文本,并将它们分配给一个内置变量列表(int、char、string等,但不是object)。我想用一个通用的方法来处理这个问题。下面是我在三个变量的情况下使用的工作代码 public static void ReadVariablesFromString<T0, T1, T2>(out T0 input0, out T1 input1, out T2 input2, string stringIn, char[] separators) {

我需要读取一个以制表符(或逗号)分隔的文本,并将它们分配给一个内置变量列表(int、char、string等,但不是object)。我想用一个通用的方法来处理这个问题。下面是我在三个变量的情况下使用的工作代码

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));
}
有没有办法将这个模型推广到不同数量的变量?是否有可能编写一个通用方法,为这种特定情况接受不同数量的变量

另一种解决方案可能是为不同类型的变量列表编写此方法。有没有办法在列表中传递变量,而不是逐个传递

不,在C#中,不能发送变量引用数组

但是您可以创建一个具有一些属性的类,然后使用反射来填充它们

看到和
还有一些细节。

我建议您返回一份清单

List variables=ReadVariablesFromString(str,分隔符)

例如,列表中的每个条目都是您从输入字符串中解析的值

变量。元素(0)将是“a”

由于列表的类型是“object”,您可以在其中存储任何数据类型,因为每个类型最终都继承自
object
。但是,当需要使用数据时,您需要强制转换数据

char字母=(char)变量。ElementAt(0)

但您肯定已经在做类似的事情了,否则您怎么知道在每个传入的
out
参数中放入哪个变量呢

这样做意味着您可以从
ReadVariablesFromString()

string str = "a\t123\tbcd";

char var1;
int var2;
string var3;

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

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