2017-06-04 41 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(); 
} 
相關問題