2017-06-04 44 views
1

我有一个.csv文件(Book1.csv)包括有限状态机的转换:`.csv`文件的内容应该是`IEnumerable <T>'类型?

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; 
} 

但它不是有效的,因为该方法将每个过渡每次读取文件:

现在,如果我尝试读取文件一次,并通过其内容的方法,我不是k 现在我应该使用什么类型的方法的参数的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

分割每行后,您将结束与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[]>到修改方法

string FindDestination(State q0, Event s0, IEnumerable<string[]> transitions) { 

    var newq = from t in transitions 
       where t[0] == q0.Name && t[1] == s0.Name 
       select t[2]; 

    return newq.FirstOrDefault(); 
} 
相关问题