[英]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.