簡體   English   中英

c# - 如何使用描述性成員創建列表/字典

[英]c# - How to create list/dictionary with descriptive members

我的代碼有很多字典,如下所示`

//List[0] => AverageValue,List[1] => MeanValue, List[2] => Maximum

Dictionary<string,List<double>> TestValues ;

//List[0] => Sigma,List[1] => MisValue

Dictionary<string,List<double>> TestSet ;`

所以,如果你看到 List 的不同成員存儲不同的類型。 我想在智能感知中訪問這些名稱。 TestSet.Sigma=0.1 這樣我就不會錯誤地將MisValue分配給SigmaValue 我試圖從 int 派生類,但它是一個密封類。 var 也沒有幫助,因為我無法將它添加到字典中。 元組在我使用的 .net 版本(.net 3.5)中不可用。 所以請有人指導我。

注意:我使用的是 Visual c# express 2008。

編輯:公司給了我“visual c# express 2008”。 從第一個本身開始,這個應用程序就使用這個版本創建了。該應用程序還使用了 3rd 方 dll。 因此,如果我們更改.net 版本,它可能會影響很多事情。

你在這里混合了兩種不同的東西:

第一個是濫用列表或字典(它們是在運行時可以通過索引/鍵訪問的任意長度結構),當您想要的是元組或簡單的自定義結構時,可以在編譯時通過名稱訪問,從而阻止錯誤當您想要0時,您不小心將索引設置為1

public struct TestSet
{
    double Sigma {get;set;}
    double MisValue {get;set;}
}

第二個是你想避免不小心將Sigma設置為MisValue ,這是一個類型問題。 您最初的方法 - 擴展double - 是有道理的,但正如您所發現的那樣,在 .NET 中是不可能的。 但是您可以使用包裝類型和隱式轉換來做同樣的事情:

public class Sigma
{
    public double Value {get; private set;}

    public Sigma(double value)
    {
        Value = value;
    }

    public static implicit operator double(Sigma sigma) 
    {
        return sigma.Value;
    }

    public static implicit operator Sigma(double value)
    {
       return new Sigma(value);
    }
}

其他值類型也是如此。 這將允許您將double分配給它們,而不是彼此分配。 將其與上面的自定義結構相結合,以獲得類型安全的體驗:

TestSet set = new TestSet();
set.Sigma = 5.1;               // works - implicit conversion from double.
double sigmaValue = set.Sigma; // works - implicit conversion.
Sigma anotherSigma = set.Sigma;
set.MisValue = anotherSigma;   // doesn't compile - no implicit conversion.

最后,正如評論中提到的,在 IDE 有六次重大修訂和對語言有五次(我認為)的情況下使用一個 12 歲的平台是令人沮喪的方法,因為許多指南和在線資源可能會至少已更新到 C# 6。 我能想到使用它的唯一原因是與現有代碼的兼容性,最好的做法是更新該代碼。 VS2019 有免費的社區版,VSCode 是免費的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM