我最近遇到了一个PHP代码,其中CSV字符串被分成两个变量:
list($this->field_one, $this->field_two) = explode(",", $fields);
我把它变成了:
string[] tmp = s_fields.Split(',');
field_one = tmp[0];
field_two = tmp[1];
在没有创建临时数组的情况下是否存在C#等价物?
答案 0 :(得分:0)
public static class MyPhpStyleExtension
{
public void SplitInTwo(this string str, char splitBy, out string first, out string second)
{
var tempArray = str.Split(splitBy);
if (tempArray.length != 2) {
throw new NotSoPhpResultAsIExpectedException(tempArray.length);
}
first = tempArray[0];
second = tempArray[1];
}
}
写这段代码我几乎感到内疚。希望这会做到这一点。
答案 1 :(得分:0)
你这个非常狭隘的问题的答案是否定的。 C#不提供多任务'功能,因此您无法从任何内容中提取任意值集(例如Split()
)并将其分解为单个命名变量。
通过使用out
参数编写参数,可以为特定数量的变量提供解决方法。请参阅@vlad以获得答案。
但你为什么要这样做? C#提供了一系列令人印象深刻的功能,可以让你拆分字符串并以各种不同的方式处理它们,而不需要多次分配'应该几乎没有被注意到。
解析字符串通常涉及其他操作,例如处理格式错误,修剪空格,大小写折叠。可能少于2个字符串或更多。要求可能会随着时间而变化当你准备好更强大的字符串解析器时,C#将会等待。
答案 2 :(得分:0)
您可以使用以下方法:
- 创建一个继承自动态对象的类。
- 创建一个本地字典,用于将变量值存储在继承的类中。
- 取消TryGetMember和TrySetMember函数,从字典中获取和设置值。
- 现在,您可以拆分字符串并将其放入字典中,然后访问您的变量,如:
dynamicObject.var1