我想在c#中一次分配多个变量。我知道我可以将每个变量分配给数组的索引,但我想知道是否还有另一种选择。我正在处理的示例代码如下:
我使用以下代码查找带变量的行并返回该行:
static public string linqalternative(string textfind1)
{
var nextLine = File.ReadLines(FILENAME)
.SkipWhile(line => !line.Contains(textfind1))
.Skip(1)
.First();
string linqalternative = nextLine;
return linqalternative;
}
然后我在main子例程中调用上面的函数,如下所示:该行有多个值,它存储在一个数组中。然后我希望为新变量分配该数组的值。
// Read Card C4
string stringC4 = linqalternative("C4 ISLTMT ISSSMMT");
string[] C4values =
stringC4.Split((string[])null, StringSplitOptions.RemoveEmptyEntries);
int ISLTMT = int.Parse(C4values[0]);
int ISSSMMT = int.Parse(C4values[1]);
int ISLTMTS = int.Parse(C4values[2]);
int ISIA = int.Parse(C4values[3]);
float RPIA = float.Parse(C4values[4]);
float RSQMIA = float.Parse(C4values[5]);
int ITRMIA = int.Parse(C4values[6]);
int ISAVEC = int.Parse(C4values[7]);
我可以将上面显示的所有变量分配到一行或两行中,还是唯一的选择?
答案 0 :(得分:0)
我没有看到将它变成单行的重点。您可以创建一个类而不是单独的变量,并让该类包含解析逻辑:
public class C4
{
public int ISLTMT { get; set; }
public int ISSSMMT { get; set; }
public int ISLTMTS { get; set; }
// ...
public static C4 ParseFromLine(string line)
{
string[] values = line.Split((string[])null, StringSplitOptions.RemoveEmptyEntries);
return new C4
{
ISLTMT = int.Parse(C4values[0]),
ISSSMMT = int.Parse(C4values[1]),
ISLTMTS = int.Parse(C4values[2]),
// ...
};
}
}
然后使用此代码将非常简单:
string stringC4 = linqalternative("C4 ISLTMT ISSSMMT");
C4 parsed = C4.ParseFromLine(stringC4);
并访问parsed.ISLTMT
等值。
答案 1 :(得分:0)
要回答您的问题,是的,可以使用基本变量声明语法对相同类型的变量执行此操作:
int ISLTMT = int.Parse(C4values[0]), ISSSMMT = int.Parse(C4values[1]); // etc., etc.
float RPIA = float.Parse(C4values[4]), RSQMIA = float.Parse(C4values[5]);
然而,这不是非常易读,并且不建议使用,尤其是,因为您尝试分配的变量数量为。
正如@meda在评论中所说的那样,"不要吝啬线条,它是免费的,更好的清晰度"。