`.csv`文件内容的`IEnumerable <t>`类型应该是什么?

时间:2017-06-04 22:19:09

标签: c# linq

我有一个.csv文件(Book1.csv),包括有限状态机的转换:

q_src,eve,q_dst
q0,sig1,q1
q1,sig2,q2

我需要编写一个方法来查找转换的结果。

State FindDestination(State q0, Event s0)
{
    var transitions = File.ReadAllLines(@"Book1.csv").Skip(1).Select(x => x.Split(','));
    State newq = from t in transitions
                 where t.q_src ==q0 && t.eve == s0
                 select new t.q_dst;
    return newq;
}

但它效率不高,因为该方法每次都会为每次转换读取文件:

现在,如果我尝试读取文件一次并将其内容传递给方法,我就不会了 现在我应该在方法的参数中使用什么类型的transitions

var transitions = File.ReadAllLines(@"Book1.csv").Skip(1).Select(x => x.Split(','));

State FindDestination(State q0, Event s0, ? transitions)   //?type
{
    State newq = from t in transitions
                 where t.q_src ==q0 && t.eve == s0
                 select new t.q_dst;
    return newq;
}

此外,StateEvent类只有一个属性Name

我读过粗略的提示是使用IEnumerable<?>,但?文件的.csv类型是什么?

2 个答案:

答案 0 :(得分:3)

分割每一行后,您最终会得到<span> {{sellschoolvar}} </span>

IEnumerable<string[]>

所有类型的返回都是IEnumerable<string[]> transitions = File.ReadAllLines(@"Book1.csv").Skip(1).Select(x => x.Split(','));

System.String

所以将string FindDestination(State q0, Event s0) { var transitions = File.ReadAllLines(@"Book1.csv").Skip(1).Select(x => x.Split(',')); var newq = from t in transitions where t[0] == q0.Name && t[1] == s0.Name select t[2]; return newq.FirstOrDefault(); } 传递给修改后的方法

IEnumerable<string[]>

答案 1 :(得分:1)

ReadAllLines返回时,string[] IEnumerable<string>应该是有效匹配。