2012-02-23 84 views
1

這是C#程序中的一個小片段,用於從文件生成字典。此函數的返回類型

var _mappings = File.ReadAllLines("file.txt") 
    .Select(line => 
    { 
     var splitt = line.Split(new char[] { ' ' }, 
      StringSplitOptions.RemoveEmptyEntries); 

     return new fooclass 
     { 
      foo = abc[0], 
      foo1 = abc[1], 
      foo2 = abc[2], 
     }; 
    }) 
    .ToDictionary<fooclass, string>(mkey => mkey.abc[0]); 

我在一個兩難的問題,就是如何從函數返回這個字典。返回弱類型在函數中不被認爲是好的,var本身不能是返回類型。

那麼,在這種情況下什麼是理想的?

+0

'Dictionary '? – 2012-02-23 12:47:19

+0

當你指定'ToDictionary '時,它已經被強制類型化了。究竟是什麼問題? – ken2k 2012-02-23 12:47:59

+0

我認爲_mappings的類型是Dictionary ?返回該類型有什麼問題? – 2012-02-23 12:48:14

回答

0

如果它有幫助,下面編譯。

public class SomeClass 
{ 
    private Dictionary<char, ScoresandPercentiles> function() 
    { 
     var _mappings = File.ReadAllLines("file.txt").Select(line => 
      { 
       var splitt = line.Split(new char[] { ' ' }, 
             StringSplitOptions.RemoveEmptyEntries); 

       return new ScoresandPercentiles 
       { 
        foo = splitt[0], 
        foo1 = splitt[1], 
        foo2 = splitt[2], 
       }; 
      }).ToDictionary(mkey => mkey.foo[0]); 
     return _mappings; 
    } 
} 

internal class ScoresandPercentiles 
{ 
    public string foo; 
    public string foo1; 
    public string foo2; 
} 
+0

如果你真的不需要字典,你也可以做'.ToList();'並且返回一個List 類型' – 2012-02-23 13:26:41

0

你或許應該改變你的代碼,這樣,關鍵是char

ToDictionary<char, fooclass>(mkey => mkey.abc[0]); 

而且你可以從你的函數作爲返回。

+0

如何用簡單的聲明告訴Dictionary的''鍵? – Cipher 2012-02-23 12:48:22

+0

我認爲你應該發表評論等問題,而不是回答。 – ken2k 2012-02-23 12:48:27

+0

不能隱式地將'System.Collections.Generic.Dictionary '類型轉換爲''System.Collections.Generic.Dictionary ''。看起來像必須有一些明確的重定義字典格式的關鍵。 – Cipher 2012-02-23 12:51:14

1

var不是一種類型,它不弱或不動。這是mereley告訴編譯器找出它是什麼類型。在這種情況下,它將是由ToDictionary方法返回的類型,它將是Dictionary<fooclass, string>

+0

我嘗試過並得到這個錯誤。無法將類型'System.Collections.Generic.Dictionary <字符串,fooclass>'隱式轉換爲'System.Collections.Generic.Dictionary '。看起來像必須有一些明確的重定義字典格式的關鍵。 - – Cipher 2012-02-23 12:52:13

+1

您需要確保類型參數的順序匹配:「Dictionary 」顯然與「Dictionary '不同。第一個參數是鍵的類型,第二個參數是值。 – 2012-02-23 12:53:51

+0

在方法中指定的順序是正確的,並且與'_mappings'匹配,這就是問題所在。這是與上述錯誤提示。 – Cipher 2012-02-23 12:56:19